Затримка відключення системи з systemd?


1

Що є кращим способом затримки вимкнення системи на будь-яку кількість часу в systemd?

Я намагаюся наступний блок:

root@ip-172-30-3-65:~# cat /etc/systemd/system/delay_by30.service
[Unit]
Description=Delay Shutdown by 30 sec.
#Before=apache2 nginx php5-fpm

[Service]
Type=oneshot
ExecStart=/bin/echo
ExecStop=/bin/sleep 30

[Install]
WantedBy=multi-user.target

Однак я отримую дуже змішані результати. Для початку моя ExecStopлінія якимось чином виконується, systemctl startа моя ExecStartдалі systemctl stop, навпаки, ніж повинна бути. Часові позначки в цьому journalctlпідтверджують:

root@ip-172-30-3-65:~# systemctl enable delay_by30.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/delay_by30.service to /etc/systemd/system/delay_by30.service.
root@ip-172-30-3-65:~# systemctl start delay_by30.service 
root@ip-172-30-3-65:~# systemctl stop delay_by30.service 
root@ip-172-30-3-65:~# journalctl -n 4 -u delay_by30
-- Logs begin at Fri 2017-01-06 17:05:34 GMT, end at Mon 2017-01-09 15:57:34 GMT. --
Jan 09 15:55:59 ip-172-30-3-65 systemd[1]: Starting Delay Shutdown by 30 sec....
Jan 09 15:56:29 ip-172-30-3-65 systemd[1]: Started Delay Shutdown by 30 sec..
Jan 09 15:57:34 ip-172-30-3-65 systemd[1]: Stopped Delay Shutdown by 30 sec..

1
Що ви намагаєтеся досягти?
don_crissti

Коли systemdвказується, що він повинен спустити систему, він повинен спати щонайменше 30 секунд, перш ніж робити це.
NarūnasK

1
@ NarūnasK Це те , що ви намагаєтеся зробити, але то , що ви намагаєтеся досягти , роблячи це? Напевно, є щось навіть краще, що може вирішити вашу фактичну кореневу проблему.
mattdm

@don_crissti Зовсім не має значення, але якщо ви повинні знати: хост відключається швидше, ніж AWS LB може це помітити, отже, затримка відключення вирішує цю проблему, інакше LB надсилає трафік на хост, який не існує.
NarūnasK

Відповіді:


2

Вам потрібно додати RemainAfterExit=yesдо свого [Service]розділу. Наразі systemd бачить /bin/echoвихід вашого процесу ( ), і в цей момент він вважає, що послуга завершена, і продовжує її зупиняти.

(Напевно, ви також можете просто не мати ExecStartрядка, але я цього не перевіряв.)


Дійсно, ExecStart не потрібен, як пояснено тут ...
don_crissti

Без ExecStartцього було б ідеально, проте я отримуюdelay_by30.service lacks ExecStart setting. Refusing.
NarūnasK

@ NarūnasK Я думаю, це залежить від системної версії.
дероберт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.