====== Службы ====== Службы управляются [[:linux:kernel:systemd|системой инициализации systemctl]].\\ [[https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units|Хорошая статья]]\\ **Список активных служб** systemctl -a systemctl -a | grep "myService" systemctl list-units list-init-files --type=service --state=enable systemctl list-unit-files "my-name" **Enable/Disable не подразумевает Start/Stop** с-но, даже после отключения службы (Disable), она продолжит работать, если уже была запущена.\\
:!: Примеры [[https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files|Описание директив]]\\ [Unit] Description=Kafka Service Requires=network.target remote-fs.target After=network.target remote-fs.target [Service] Type=simple User=kafka ExecStart=/bin/sh -c '/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties > /opt/kafka/kafka.log 2>&1' ExecStop=ExecStop= /bin/kill -2 $MAINPID ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure [Install] WantedBy=multi-user.target [Unit] Description=FProfilesAutoAcceleration service After=tank.mount After=network-online.target [Service] ExecStart=java -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=10045 \ -Djava.rmi.server.hostname=10.10.40.204 \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false \ -jar FProfilesAutoAcceleration.jar \ -Xmx7G WorkingDirectory=/opt/FProfilesAutoAcceleration Restart=always TimeoutSec=15 User=fprofilesac [Install] Alias=fac.service
:!: Инстансы Systemd SystemD поддерживает функционал инстансов, удобно что к самому приложению особых требований не предъявляется, по сути используются повторные запуски с разными параметрами/окружениями\\ Суть в том что в юнит файле используем директиву "%i" везде где надо отразить уникальность инстанса, файл называем "myName@.service"\\ Далее, работаем с ним "systemctl start myName@one", "systemctl enable myName@two" и тд\\ Все что после собаки будет передаваться в юнит файл вместо директивы "%i", с-но гибкость очень высокая\\ Для сервиса спокойно можно создать два юнит-файла, дял единичного и для мульти (хотя хз надо ли)\\ Интересно что итогового юнит файла у зареганной службы нигде нет, есть только этот с собакой "myservice@.service"\\ При обращении к службе, переданное после собаки название просто подставляется в этот шаблон, так и работет похоже\\ Странно что после удаления пакета остается в зареганной службе, хоть и пишет что unit file not found\\ Пример мульти конфига\\ [Unit] Description="myName for %i instance" Requires=network-online.target consul.service Wants=openvpn-server.service zfs.target After=network-online.target openvpn-server.service zfs.target consul.service [Service] ExecStartPre=rm -f /opt/myName/log/%i.stdout WorkingDirectory=/opt/myName Environment=PYTHONUNBUFFERED=1 Type=exec ExecStart=/usr/bin/python3 /opt/myName/myName.py -l critical -c %i_config.yaml -f log/%i.log ExecStartPost=/bin/sleep 45 ExecStartPost=kill -0 $MAINPID TimeoutStartSec=60 #Restart=on-failure #RestartSec=5s StandardOutput=file:/opt/myName/log/%i.stdout [Install] WantedBy=multi-user.target