Yanıtlar:
Kendi Bash işlevinizi oluşturun ve bunu aşağıdakilere ekleyin ~/.bashrc
:
check_upstart_service(){
status $1 | grep -q "^$1 start" > /dev/null
return $?
}
Çıktıyı ayrıştırma yönteminden gerçekten hoşlanmıyorum, ancak başka bir bariz yol göremiyorum. Ve bu durumda Upstart belgelerinde<service name> start
belirtildiği gibi çıktısı çok güvenilirdir .
Şimdi şöyle kullanabilirsiniz:
if check_upstart_service ssh; then echo "running"; else echo "stopped"; fi
Dize dayalı bash içerir :
job='your_job_name'
job_status=$(status ${job})
if [[ ${job_status} == *running* ]]
then
# do whatever you need
else
# do whatever you need
fi
İlk dürtüüm sağlanan ImaginaryRobots kodunun varyasyonunu kullanmaktı
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
ki böyle bir şey döndürür
yöntem dönüş gönderen =: 1.0 -> dest =: 1.94 answer_serial = 2 değişken dize "çalışıyor"
ve döndürülen dizenin "çalışıyor" içerip içermediğini kontrol etmek için yukarıdaki çözümü kullanın. Ancak bu iş çalışmıyor dbus çağrısı durum 1 ile çıkacak yerine beklediğim gibi "bekleyen" döndürüyor.
status ${job}
böyle bir iş olmadığı durumlar dışında asla durum 1 ile çıkmazdı.
Söz konusu hizmetin durumunu sorgulamak için DBUS kullanırsınız.
$ 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
Kendi uptart işinizi yazıyorsanız, bunun yerine upstart olaylarını veya paket bağımlılıklarını kullanmanız gerektiğini unutmayın.
Uptart status komutunun Linux Standard Base projesinden init komut dosyası özelliklerine uyduğu, yani 0 çıkış kodunun programın çalıştığı, 1-3 çıkış kodunun çalıştığı ve diğer çıkış kodu tanımsız bir durum anlamına gelir.
Bkz. 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
Sessiz olduğundan emin olmak için bunu değiştirmek isteyebilirsiniz .