Відповіді:
Помістіть сценарій у відповідну 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 з відмінною відповіддю, який допоміг мені навчитися системності. Сподіваюся, це допомагає!