Як я можу запустити скрипт при запуску на Ubuntu Server 17.10?


13

Як я можу запустити скрипт при запуску на машині Ubuntu Server 17.10? Я думаю, що метод був змінений в 17.10.

Відповіді:


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 (1), cron (8), crontab (8)


2

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.

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

  1. Напишіть сценарій, який ви хочете запустити при запуску, nanoабо будь-який редактор на ваш вибір. Переконайтеся, що ви включили належний шебанг у верхній частині файлу ( #!/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. Щоб видалити його, просто замініть ввімкнути "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 з відмінною відповіддю, який допоміг мені навчитися системності. Сподіваюся, це допомагає!


2
Дякуємо за те, що ви поставили до цього питання системну перспективу! Я хотів би зазначити, що немає необхідності форсувати фонове зображення у рядку ExecStart.
Jeff Schaller
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.