Ответы:
Создайте свою собственную функцию Bash и поместите ее в свой ~/.bashrc
:
check_upstart_service(){
status $1 | grep -q "^$1 start" > /dev/null
return $?
}
Мне действительно не нравится способ парсинга вывода, но я не вижу другого очевидного пути. И в этом случае вывод <service name> start
очень надежен, как указано в документации Upstart .
Теперь вы можете использовать это так:
if check_upstart_service ssh; then echo "running"; else echo "stopped"; fi
На основе строки содержит в bash :
job='your_job_name'
job_status=$(status ${job})
if [[ ${job_status} == *running* ]]
then
# do whatever you need
else
# do whatever you need
fi
Моим первым побуждением было использовать вариант кода, предоставленный ImaginaryRobots
job='your_job_name'
dbus-send --system --print-reply --dest=com.ubuntu.Upstart \
/com/ubuntu/Upstart/jobs/${job}/_ \
org.freedesktop.DBus.Properties.Get string:'' string:state
что бы вернуть что-то вроде
метод return sender =: 1.0 -> dest =: 1.94 reply_serial = 2 вариант строки «выполняется»
и используйте решение выше, чтобы проверить, содержит ли возвращаемая строка «running». Однако в случае, если задание не выполняется, вызов dbus завершится со статусом 1, а вместо этого вернется «ожидание», как я и ожидал.
status ${job}
никогда не выйдет со статусом 1, за исключением случая, когда такой работы нет.
Вы бы использовали DBUS для запроса статуса этой конкретной службы.
$ job=myjob
$ dbus-send --system --print-reply --dest=com.ubuntu.Upstart /com/ubuntu/Upstart/jobs/${job}/_ org.freedesktop.DBus.Properties.GetAll string:''
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.
status $1 2> /dev/null | grep -q "^$1 start" > /dev/null 2> /dev/null
чтобы убедиться, что он молчит.