Автозапуск Xorg
Крім сценаріїв запуску на системному рівні, у середовищі робочого столу може бути свій власний спосіб автоматичного запуску програм. Папка .config/autostart
повинна бути нейтральним для настільних способів визначення записів автозапуску. /etc/xdg/autostart
призначений для загальної системи. Деталі про специфікацію можна знайти на веб- сайті http://developer.gnome.org/autostart-spec/ .
Для автозапуску LXDE також можна встановити записи ~/.config/lxsession/LXDE/autostart
.
Трохи інакше, якщо вам потрібно запустити сценарії після запуску мережі. У цьому випадку слід перевірити спеціальні сценарії після підключення, які можна визначити для вашого менеджера мережі. І NetworkManager, і wicd мають свої способи введення записів автозапуску після підключення. Якщо мережа налаштована через ifupdown
, то сценарії після публікації можна помістити в /etc/network/if-up.d/
папку. Але кращий підхід до запуску сценаріїв після підключення може бути системним (для систем, які його підтримують, що є більшістю сучасних дистрибутивів).
Автозапуск як системна служба
Якщо ви хочете автозапустити, це не графічний додаток, для якого потрібен робочий стіл, то краще уникати використання будь-яких засобів автоматичного запуску, наданих xorg або вашим поточним середовищем робочого столу.
systemd
стала всюдисущою у багатьох сучасних дистрибутивах, і вона пропонує багато контролю та гнучкості з точки зору того, як запускаються ваші послуги та як вони працюють.
Я підсумую деякі переваги ( systemd може зробити набагато більше ):
- Запустити як root або як конкретний користувач: напр
User=myuser
- Перезапустити служби при збої з настроюваними таймаутами:
Restart=on-failure|on-watchdog|on-abnormal|always
- Налаштування типу послуги:
Type=simple|forking|oneshot|notify|dbus
- Встановіть передумови та залежності запуску, тобто ви можете встановити свою послугу після запуску мережі (
Wants=network-online.target
у [Unit]
розділі).
Приклад служби, яка запускає демон телеграми-кліпу. Помістіть його /etc/systemd/system/tg.service
.
[Unit]
Description=MyDaemon
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/local/bin/telegram-cli -k /etc/telegram-cli/tg-server.pub -W -P 1234 -d -vvvRC
ExecStop=/usr/bin/pkill -f telegram-cli
User=jicu
[Install]
WantedBy=multi-user.target
Тепер ви можете ввімкнути службу для автоматичного запуску:
sudo systemctl enable tg
Запуск послуги:
sudo systemctl start tg
Припинення послуги:
sudo systemctl stop tg
Перевірте статус:
systemctl status tg
Вимкнути послугу:
sudo systemctl disable tg
Щоб заощадити додатковий набір тексту ви можете додати в вашій ~/.bashrc
лінії , alias sc='sudo systemctl $*'
то ви зможете скоротити команди вище, наприклад sc start tg
.
ПРИМІТКА. Якщо ви використовували, cron
тоді знаєте, що записи crontab виконуються в обмеженому середовищі - те ж саме стосується systemd
: завжди використовуйте абсолютні шляхи і не допускайте жодних визначених змінних. Явно встановіть будь-які змінні, від яких залежать ваші сценарії. systemd
не використовуватиме вашого користувача .bashrc
та $PATH
.
Більше інформації: