Как определить, выполняется ли задание upstart внутри скрипта Bash? То есть мне нужно «логическое» значение, чтобы сделать что-то вроде:
#!/bin/bash
if [ determine_if_job_x_is_running ]; then
echo "I see upstart job X is running, please stop it before ..."
fi
status $1 2> /dev/null | grep -q "^$1 start" > /dev/null 2> /dev/null
чтобы убедиться, что он молчит.Обычно вы используете файл PID, но вы также можете использовать pgrep для проверки ваших процессов. Предположим, что ваш сервис называется,
jobX
это будет работать:Или даже лучше
источник
На основе строки содержит в bash :
Моим первым побуждением было использовать вариант кода, предоставленный ImaginaryRobots
что бы вернуть что-то вроде
и используйте решение выше, чтобы проверить, содержит ли возвращаемая строка «running». Однако в случае, если задание не выполняется, вызов dbus завершится со статусом 1, а вместо этого вернется «ожидание», как я и ожидал.
status ${job}
никогда не выйдет со статусом 1, за исключением случая, когда такой работы нет.источник
Вы бы использовали DBUS для запроса статуса этой конкретной службы.
http://upstart.ubuntu.com/cookbook/#get-status-of-job-via-d-bus
Обратите внимание, что если вы пишете свое собственное задание upstart, вы должны использовать вместо него события upstart или зависимости от пакета.
источник
Кажется, что команда upstart status соответствует спецификации сценария init из проекта Linux Standard Base, что означает, что вы можете принять код выхода 0, означающий, что программа работает, код выхода 1-3 означает, что она запущена, и любой другой код выхода означает неопределенный статус.
См .: http://refspecs.linuxbase.org/LSB_3.0.0/LSB-PDA/LSB-PDA/iniscrptact.html.
источник