Jak ustalić status zadania upstart w skrypcie bash?


10

Jak ustalić, czy zadanie upstart działa w skrypcie Bash? To znaczy potrzebuję wartości „boolowskiej”, aby zrobić coś takiego:

#!/bin/bash
if [ determine_if_job_x_is_running ]; then
  echo "I see upstart job X is running, please stop it before ..."
fi

Odpowiedzi:


9

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> startjest 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

2
Możesz to zmienić, status $1 2> /dev/null | grep -q "^$1 start" > /dev/null 2> /dev/nullaby upewnić się, że jest cicho.
David G

1

Zwykle używasz pliku PID, ale możesz także użyć pgrep do sprawdzenia swoich procesów. Załóżmy, że twoja usługa się nazywa, jobXto zadziała:

if [ $(pgrep jobX) ]; then

A nawet lepiej

if pgrep jobX > /dev/null 2>&1

1

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.


1
Odmiana ... isRunning = $ (status $ {job} | grep running | wc -l) zwróci 1, jeśli jest uruchomiony i 0, jeśli nie jest.
Naraen

0

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 po prostu wydrukowałby jakiś status tekstowy, który musiałbyś następnie przeanalizować, aby uzyskać wartość logiczną, prawda?
laslowh

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.