Odpowiedzi:
Utwórz własną funkcję Bash i umieść ją w ~/.bashrc
:
check_upstart_service(){
status $1 | grep -q "^$1 start" > /dev/null
return $?
}
Naprawdę nie podoba mi się sposób analizowania danych wyjściowych, ale nie widzę innego oczywistego sposobu. I w tym przypadku wynik <service name> start
jest bardzo niezawodny, ponieważ jest określony w dokumentacji Upstart .
Teraz możesz użyć tego w następujący sposób:
if check_upstart_service ssh; then echo "running"; else echo "stopped"; fi
Na podstawie String zawiera w bash :
job='your_job_name'
job_status=$(status ${job})
if [[ ${job_status} == *running* ]]
then
# do whatever you need
else
# do whatever you need
fi
Moim pierwszym impulsem było użycie dostarczonej odmiany kodu 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
co zwróci coś w stylu
metoda return sender =: 1.0 -> dest =: 1.94 odpowiedz_serial = ciąg 2 wariantów „działa”
i użyj powyższego rozwiązania, aby sprawdzić, czy zwrócony ciąg zawiera „uruchomione”. Jednak w przypadku, gdy zadanie nie działa, połączenie dbus zakończy działanie ze statusem 1, zwracając „czekanie”, tak jak się spodziewałem.
status ${job}
nigdy nie wyjdzie ze statusem 1, z wyjątkiem przypadku, gdy nie ma takiej pracy.
Używałbyś DBUS do zapytania o status tej konkretnej usługi.
$ 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
Pamiętaj, że jeśli piszesz własne zadanie upstart, powinieneś użyć zdarzeń upstart lub zależności pakietu.
Wygląda na to, że polecenie statusu upstart jest zgodne ze specyfikacją skryptu inicjującego z projektu Linux Standard Base, co oznacza, że można założyć, że kod zakończenia 0 oznacza, że program działa, kod wyjścia 1-3 oznacza, że jest uruchomiony, i dowolny inny kod wyjścia oznacza niezdefiniowany status.
Zobacz: 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
aby upewnić się, że jest cicho.