У меня есть сценарий, который запускается бесконечно при запуске, и другой сценарий, который безопасно его завершает. Второй сценарий требует подключения к удаленной базе данных. Оба они объявлены в той же службе, что и ExecStart
и ExecStop
соответственно. Мне нужен второй скрипт, чтобы заблокировать выключение / перезагрузку до его завершения. В настоящее время первый сценарий работает нормально, но выполнение второго сценария преждевременно завершается. Вот что у меня есть на данный момент:
[Unit]
DefaultDependencies=no
Wants=network-online.target
After=network.target network-online.target
Before=reboot.target shutdown.target halt.target
[Service]
Type=oneshot
RemainAfterExit=true
User=test
ExecStart=/usr/bin/python /home/test/test.py
ExecStop=/usr/bin/sh /home/test/test
KillMode=none
[Install]
WantedBy=multi-user.target
Я пробовал использовать следующее: systemd ждать завершения команды перед перезапуском / выключением или убийством других процессов но это не решило мою проблему, и похоже, что его команды выполняются относительно быстро.
Я добавил следующее, и это сработало:
TimeoutSec=300min
Моя окончательная конфигурация:
[Unit]
DefaultDependencies=no
Wants=network-online.target
After=network.target network-online.target
Before=reboot.target shutdown.target halt.target
[Service]
Type=simple
RemainAfterExit=true
User=test
ExecStart=/usr/bin/python /home/test/test.py
ExecStop=/usr/bin/sh /home/test/test
KillMode=none
TimeoutSec=300min
[Install]
WantedBy=multi-user.target
Заметка: Я специально не делал TimeoutSec=infinity