![systemd зависает при запуске или перезапуске службы](https://rvso.com/image/898924/systemd%20%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B0%D0%B5%D1%82%20%D0%BF%D1%80%D0%B8%20%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B5%20%D0%B8%D0%BB%D0%B8%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B5%20%D1%81%D0%BB%D1%83%D0%B6%D0%B1%D1%8B.png)
Я новичок в systemd после обновления до 16.04 и столкнулся с проблемой запуска и перезапуска служб. Когда я запускаю (например)...
systemctl start djalbat.com
...вроде бы работает, однако я не получаю приглашение обратно, оно просто зависает. Если я ctrl-c
получаю приглашение обратно и затем проверяю, запущена ли служба, то, похоже, она это сделала. Интересно, что в конфигурации может вызвать это? Вот:
[Unit]
Description=djalbat.com
[Service]
Type=forking
WorkingDirectory=/var/www/djalbat.com/
ExecStart=/usr/bin/node ./bin/main.js start 2>&1 >> /var/log/djalbat.com.log
[Install]
WantedBy=multi-user.target
Также, если кто-то сможет указать на необходимость последней WantedBy
директивы, это будет оценено по достоинству.
решение1
Так вот, оказалось, что команда, которая выполняется с конфигурацией, ExecStart
невилкатогда как systemd
служба была настроена на разветвляющийся исполняемый файл. Это привело systemctl
к ожиданию for исполняемого файла, что привело к невозвращению командной строки.
Правильная конфигурация для исполняемого файла, который невилказаключается в использовании Type=simple
.
[Unit]
Description=djalbat.com
[Service]
Type=simple
WorkingDirectory=/var/www/djalbat.com/
ExecStart=/usr/bin/node ./bin/main.js start 2>&1 >> /var/log/djalbat.com.log
[Install]
WantedBy=multi-user.target
Требуется WantedBy
для соединения этого блока с целью, чтобы этот блок или служба запускались автоматически при достижении соответствующей цели, а служба могла запускаться автоматически с
systemctl enable djalbat
Не забудьте обновиться systemd
после внесения изменений в файлы сервиса с помощью
systemctl daemon-reload