Как запустить скрипт при запуске на компьютере с Ubuntu Server 17.10? Я думаю, что метод был изменен в 17.10.
источник
Как запустить скрипт при запуске на компьютере с Ubuntu Server 17.10? Я думаю, что метод был изменен в 17.10.
Поместите скрипт в соответствующую cron
таблицу пользователя (т.е. crontab ) с расписанием @reboot
.
Пользователь может редактировать свою cron
таблицу с помощью crontab -e
.
Пример, который будет запускаться /path/to/script.sh
при запуске:
@reboot /path/to/script.sh
Если вам нужно запустить его как root, не используйте @reboot sudo /path/to/script.sh
;
используйте sudo crontab -eu root
для редактирования crontab root.
Смотрите также: crontab (1), cron (8), crontab (8)
В Ubuntu 15.04 и более поздних версиях по умолчанию используется нечто, называемое systemd
программой, которая автоматизирует службы и процедуры запуска. Вы можете сделать свой собственный и добавить его в список сервисов запуска с небольшим усилием.
Базовый системный сервис
Это простой .service
файл, который можно использовать для запуска моего графического сервера Python (это мог быть сценарий оболочки, это не имеет значения):
[Unit]
Description=Python GUI Server
[Service]
ExecStart=/home/pi/software/GUI_POE.py &
[Install]
WantedBy=multi-user.target
Description
Опция любая строка , которая описывает , что услуга или делает.
ExecStart
Параметр задает команду для выполнения. Здесь я даю путь к исполняемому скрипту Python и использую &
токен для его запуска в фоновом режиме.
В WantedBy
опции определяет приоритет, основанный на том, что цели хочет использовать эту услугу. Если вам не нужно, чтобы служба работала в определенное время, просто установите для нее значение multi-user.target
.
Основная процедура
Напишите скрипт, который вы хотите запустить при запуске, nano
или любой другой редактор на ваш выбор. Убедитесь, что вы добавили правильный shebang в самом верху файла ( #!/bin/bash
для скриптов bash) и предоставили ему права на выполнение chmod
.
Просто запишите ваш сервис в файл с именем my_service.service, а затем скопируйте его в соответствующий каталог с cp my_service.service /lib/systemd/system/
.
Запустите службу: sudo systemctl start my_service.service
. Это запускает любой скрипт, который вы указали для запуска службы. Та же команда с «остановкой» вместо запуска отключит ее.
Добавить услугу в процессе запуска: sudo systemctl enable my_service.service
. Чтобы удалить его, просто замените «включить» на «отключить» в той же команде.
Вот и все! Имейте в виду, что ваш скрипт будет автоматически запускаться с правами суперпользователя, как это по умолчанию в службах systemd.
Мой простой пример (полный)
Для справки, у меня есть простой системный сервис, который запускает простой Python GUI Server с использованием Dash:
[Unit]
Description=Python GUI Server
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/home/pi/software
ExecStart=/home/pi/software/GUI_POE.py &
Restart=always
RestartSec=15s
KillMode=process
TimeoutSec=infinity
User=pi
Group=pi
[Install]
WantedBy=multi-user.target
Этот пример сервиса использует скрипт Python3, но формула точно такая же для скрипта оболочки.
Дальнейшее чтение можно найти в этом превосходном учебнике DigitalOcean, а также в этой теме AskUbuntu с отличным ответом, который помог мне освоить systemd. Надеюсь это поможет!