systemd секции, пути
Курю systemd. Есть некие секции юнита
[Unit]
Description=MyUnit
After=syslog.target
After=network.target
After=nginx.service
After=mysql.service
Requires=mysql.service
Wants=redis.service
[Service]
Type=forking
PIDFile=/work/www/myunit/shared/tmp/pids/service.pid
WorkingDirectory=/work/www/myunit/current
User=myunit
Group=myunit
Environment=RACK_ENV=production
OOMScoreAdjust=-1000
ExecStart=/usr/local/bin/bundle exec service -C /work/www/myunit/shared/config/service.rb --daemon
ExecStop=/usr/local/bin/bundle exec service -S /work/www/myunit/shared/tmp/pids/service.state stop
ExecReload=/usr/local/bin/bundle exec service -S /work/www/myunit/shared/tmp/pids/service.state restart
TimeoutSec=300
[Install]
WantedBy=multi-user.target
Секция [Unit] мне полностью понятна. С секции [Service]начинают возникать проблемы. А именно:
PIDFile- откуда он возьмется? Мне нужно его в своем скрипте явно прописать(как, если он с каждым новым запуском процесса меняется) или systemd каким то образом сам найдет пид процесса который запуститься из скрипта или...в общем мне в целом непонятно про PIDFile. Откуда и что берется и какой путь я должен указать к пиду.WorkingDirectory- что я должен написать здесь? путь к скрипту или к чему?UserиGroup- тоже непонятно откуда взялось. Я думаю про текущего пользователя, но тогда мне непонятно почему в примере указаноmyunit. Пользователь типа такой или что это? Здесь пояснения просто нет что заmyunitтакой.Environment- не понимаю что это и как его правильно указывать и откуда взять.Exec Start,Exec Stop,Exec Reload- мне понятно в целом что это обработка команд на стоп старт и релод, но здесь не понимаю на какие файлы указывает команда послеexec service, непонятно чем-Cотличается от-C- Ну и
Installтоже не особо понятно. В общем могу предположить, что здесь указание какой пользователь может запустить юнит, но если не правильно догадываюсь, поправьте плз.
Внимание вопрос: кто-то может мне по пунктам обьяснить что к чему здесь?Учитывая, что я это только сейчас systemd курить начал и еще толком ничего не понял.
Пример взят отсюда
Ответы (1 шт):
PIDFile создаётся демоном. Если демон не создаёт такого файла, можно ничего не писать, systemd и без того умеет узнавать активные процессы через cgroups. Однако, без этого файла systemd не сможет определить какой из процессов является главным (в случае, когда их создаётся несколько).
WorkingDirectory - это рабочая директория вашего скрипта. Что это такое - читайте в разделе "работа с файлами" документации к вашему языку программирования, либо в разделе "работа с командной строкой" учебника по linux; к systemd оно отношения не имеет. Если коротко - то эта настройка задаёт чему будет равен путь
.(точка). Если скрипт никогда не использует относительные пути - эту настройку можно вообще не указывать.User и Group - это учётные данные, с правами которых будет исполняться сервис. Часто для сервиса создают отдельного пользователя и группу, одноименные с самим сервисом.
Environment - это переменные окружения, которые будут переданы сервису. Какие переменные окружения надо передавать - читайте в мануалах к сервису.
exec serviceи всё, что дальше в настройках ExecStart, ExecStop и ExecReload - это просто параметры, передаваемые в программуbundle, которая входит в экосистему языка Ruby. Соответственно, все эти параметры надо искать в документации по Ruby, к systemd они отношения не имеют.Наконец, WantedBy из секции [Install] - это настройка, которая отвечает за автозапуск сервиса. Значение
multi-user.target- это unit, который активируется при стандартном запуске ОС, соответственноWantedBy=multi-user.targetозначает, что ваш сервис будет запускаться при нормальной загрузке ОС, но не будет запускаться в аналоге "безопасного режима" (rescue.target) и других особых режимах. В большинстве случаев шаблонноеWantedBy=multi-user.targetболее чем подходит, но при желании вы можете "прицепить" свой сервис к любому юниту в системе.