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
status $1 2> /dev/null | grep -q "^$1 start" > /dev/null 2> /dev/null
aby upewnić się, że jest cicho.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,
jobX
to zadziała:A nawet lepiej
źródło
Na podstawie String zawiera w bash :
Moim pierwszym impulsem było użycie dostarczonej odmiany kodu ImaginaryRobots
co zwróci coś w stylu
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.źródło
Używałbyś DBUS do zapytania o status tej konkretnej usługi.
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.
źródło
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
źródło