Відповіді:
Створіть власну функцію 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
На основі String міститься в 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 варіант рядка "працює"
і скористайтеся рішенням вище, щоб перевірити, чи містить повернутий рядок "працює". Однак у випадку, якщо робота не працює, дзвінок 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
Зауважте, що якщо ви пишете власне початкове завдання, натомість слід використовувати події для початківців або залежність від пакунків.
Здається, що команда статусу початкового рівня відповідає специфікації сценарію 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
лише для того, щоб переконатися, що воно мовчить.