Відповіді:
Помістіть сценарій у відповідну 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 (1), cron (8), crontab (8)
Ubuntu 15.04 і вперед за замовчуванням використовує щось systemd, що називається , це програма (різновиди), яка автоматизує послуги та процедури запуску. Ви можете зробити свій власний і додати його до списку запуску служб, лише доклавши трохи зусиль.
Основна служба Systemd
Це .serviceфайл barebones, який можна використовувати для запуску мого сервера python gui (міг бути сценарій оболонки, неважливо):
[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або будь-який редактор на ваш вибір. Переконайтеся, що ви включили належний шебанг у верхній частині файлу ( #!/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. Щоб видалити його, просто замініть ввімкнути "enable" на "enable" в тій же команді.
І це все! Майте на увазі, що ваш сценарій буде автоматично запускатися з кореневими дозволами, як це за замовчуванням у системних службах.
Мій простий приклад (повний)
Для довідки, ось простий у мене системний сервіс, який запускає простий сервер із графічним інтерфейсом Python за допомогою 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 з відмінною відповіддю, який допоміг мені навчитися системності. Сподіваюся, це допомагає!