2016-11-21 9 views
2

У меня есть Systemd сценарий службы, как это:Systemd пользовательских команд для службы

# 
# systemd unit file for Debian 
# 
# Put this in /lib/systemd/system 
# Run: 
# - systemctl enable sidekiq 
# - systemctl {start,stop,restart} sidekiq 
# 
# This file corresponds to a single Sidekiq process. Add multiple copies 
# to run multiple processes (sidekiq-1, sidekiq-2, etc). 
# 
[Unit] 
Description=sidekiq 
# start sidekiq only once the network, logging subsystems are available 
After=syslog.target network.target 

[Service] 
Type=simple 
WorkingDirectory=/home/deploy/app 
User=deploy 
Group=deploy 
UMask=0002 
ExecStart=/bin/bash -lc "bundle exec sidekiq -e ${environment} -C config/sidekiq.yml -L log/sidekiq.log -P /tmp/sidekiq.pid" 
ExecStop=/bin/bash -lc "bundle exec sidekiqctl stop /tmp/sidekiq.pid" 

# if we crash, restart 
RestartSec=1 
Restart=on-failure 

# output goes to /var/log/syslog 
StandardOutput=syslog 
StandardError=syslog 

# This will default to "bundler" if we don't specify it 
SyslogIdentifier=sidekiq 

[Install] 
WantedBy=multi-user.target 

Теперь я могу выдавать такие команды, как:

sudo systemctl enable sidekiq 

sudo systemctl start sidekiq 

Я хочу, чтобы создать другую пользовательскую команду, с помощью которой я могу вполне рабочие sidekiq, спокойный sidekiq я должен послать сигнал USR1 к процессу, что-то вроде этого:

sudo kill -s USR1 `cat #{sidekiq_pid}` 

Я хочу сделать это с помощью Systemd службы, поэтому в основном команда, как

sudo systemctl queit sidekiq 

Есть ли способ для создания пользовательских команд в Systemd файла служба? Если да, то как это сделать?

ответ

1

Вы можете использовать ExecReload описываемые здесь:

https://www.freedesktop.org/software/systemd/man/systemd.service.html

Sidekiq < 5:

ExecReload=/bin/kill -USR1 $MAINPID

Sidekiq> = 5 (USR1 осуждаются в 5, который использует ЦТП):

ExecReload=/bin/kill -TSTP $MAINPID

и запустите systemctl reload sidekiq, чтобы отправить тихий сигнал.

+0

Спасибо Mike и спасибо, что создали sidekiq, мы только что купили про версию несколько дней назад. Есть ли способ создать пользовательскую команду? Перезагрузка Exec будет запутанной, если в проекте работает более одного человека. – rajat

+0

Это системный вопрос. Я не считаю, что systemd позволяет использовать собственные глаголы типа 'systemctl quiet sidekiq', но я бы посоветовал вам делать больше исследований и не принимать мое слово для этого. –

3

Это не команда "обычай", но вы можете использовать

Sidekiq> = 5:

systemctl kill -s TSTP --kill-who=main example.service 

Sidekiq < 5:

systemctl kill -s USR1 --kill-who=main example.service 

послать "тихий" сигнал , См. http://0pointer.de/blog/projects/systemd-for-admins-4.html для более подробного объяснения.