запуск скрипта как сервиса с помощью 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

Всё. Но лучше почитайте подробную документацию по параметрам, которые я не описал, пригодятся.

→ Ссылка