запуск скрипта как сервиса с помощью systemd
у меня есть скрипт
#!/usr/bin/env bash
telegram &
firefox https://chat.deepseek.com/ &
firefox https://vk.com/feed &
sleep 1
clear
я хочу запустить его как .service с помощью systemd исключительно в качетсве практики. Как мне это сделать? Где поискать информацию или литературу? Какие еще могут быть идеи для создания сервисов?
Ответы (1 шт):
Автор решения: Solt
→ Ссылка
Всё достаточно просто, надо написать текстовый файл с расширением .service Ну, например my_daemon.service с примерно таким содержимым:
[Unit]
Description = My Favorite Daemon
#тут указываются службы после которых запускать
After = network.target
#тут - службы, от которых ваш демон зависит
#Requires=mysqld.service
[Service]
#Тип демона.
#Он может быть простой программой, не умеющей уходить в фон, тогда simple
#Если сам умеет в фон уходить - forking
#Одноразовый запуск oneshot. Это вероятно ваш случай.
#Рекомендую типы погуглить, их много разных
Type=oneshot
WorkingDirectory=/где/живёт/ваша/программа
PIDFile=/путь/к/файлу/daemon.pid
#От чьего имени запускать
#User=root
#Файл окружения и доп.переменные окружения
#У меня - пути к ораклу, например
EnvironmentFile=-/etc/environment
#Environment=PATH=$PATH:/usr/lib/oracle/19.6/client64/bin
#Environment=LD_LIBRARY_PATH=/usr/lib/oracle/19.6/client64/lib
#Environment=ORACLE_HOME=/usr/lib/oracle/19.6/client64/lib
#Таймаут запуска
TimeoutSec=300
#Перезапускать ли
Restart=always
#Перезапускать, если вышел корректно сам
RemainAfterExit=yes
#Команды для запуска, остановки и перезагрузки,
#которые будут выполняться при вызове start/stop/restart/reload
ExecStart = /путь/mydaemon -параметры запуска
ExecStop = /путь/mydaemon -параметры останова
ExecReload = /путь/mydaemon -параметры перезагрузки
[Install]
#уровень запуска.
#Обычно для демонов подходит multi-user
#Однако, в вашем случае наверное надо graphical
#Посмотреть таргеты можно командой
#ls -l /lib/systemd/system/runlevel*.target
#WantedBy = multi-user.target
WantedBy = graphical.target
Остаётся сделать симлинк на этот файл в папку /etc/systemd/system/
, потом обновить конфиги и запустить.
ln -s /путь/my_daemon.service /etc/systemd/system/my_daemon.service
systemctl daemon-reload
systemctl start my_daemon
systemctl enable my_daemon
systemctl status my_daemon
Всё. Но лучше почитайте подробную документацию по параметрам, которые я не описал, пригодятся.