Как я могу запустить скрипт при запуске на Ubuntu Server 17.10?

13

Как запустить скрипт при запуске на компьютере с Ubuntu Server 17.10? Я думаю, что метод был изменен в 17.10.

Rodolfho
источник

Ответы:

14

Поместите скрипт в соответствующую 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)

DopeGhoti
источник
2

В 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.

Основная процедура

  1. Напишите скрипт, который вы хотите запустить при запуске, nanoили любой другой редактор на ваш выбор. Убедитесь, что вы добавили правильный shebang в самом верху файла ( #!/bin/bashдля скриптов bash) и предоставили ему права на выполнение chmod.

  2. Просто запишите ваш сервис в файл с именем my_service.service, а затем скопируйте его в соответствующий каталог с cp my_service.service /lib/systemd/system/.

  3. Запустите службу: sudo systemctl start my_service.service. Это запускает любой скрипт, который вы указали для запуска службы. Та же команда с «остановкой» вместо запуска отключит ее.

  4. Добавить услугу в процессе запуска: 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. Надеюсь это поможет!

Тырел Костык
источник
2
Спасибо за то, что вы привели системный взгляд на этот вопрос! Я хотел бы отметить, что нет никакой необходимости форсировать фон в строке ExecStart.
Джефф Шаллер