Solaris SMF: убить с помощью специального сигнала, или получить PID, или предотвратить убийство детей
В XML-сервисе Solaris
Я использую kill, чтобы сигнализировать о постепенном отключении
<exec_method type="method" name="stop" exec=":kill" timeout_seconds="60" />
Это прекрасно работает, за исключением того факта, что он также убивает дочерние процессы, которые в основном просто умирают после SIGTERM. Любой из них будет работать
- Получить PID, чтобы я мог использовать
exec="kill -SIGUSR1 $PID"
- Предотвратите отправку SIGTERM детям. (или, по крайней мере, не внуки)
- Используйте другой сигнал
Я бы предпочел не устанавливать отдельный скрипт, который должен помочь понять pid. Я сделаю это, если мне придется. Я бы предпочел получить его из переменной окружения или использовать встроенную команду SMF.
3 ответа
exec=":kill -USR1"
делает трюк. Без SIG
,
Я искал это при определении method="refresh"
, jperkin поправил меня своим примером exec=":kill -HUP"
тогда как на SmartOS использую exec=":kill -SIGHUP"
привело к "/sbin/sh[1]: exec: :kill: not found"
,
Это связано с тем, что оба родителя и ребенок находятся под одним и тем же контрактом ("мужской контракт" для получения дополнительной информации)
Используйте "ctrun" ("man ctrun" для дополнительной информации), это создаст дочерний процесс по другому контракту. Это предотвратит убийство ребенка во время убийства родителя.