Jawaban:
Buat fungsi Bash Anda sendiri dan letakkan ini di ~/.bashrc
:
check_upstart_service(){
status $1 | grep -q "^$1 start" > /dev/null
return $?
}
Saya benar-benar tidak menyukai cara mengurai output, tetapi saya tidak melihat cara lain yang jelas. Dan dalam hal ini output dari <service name> start
sangat andal seperti yang ditentukan dalam dokumentasi pemula .
Sekarang Anda dapat menggunakannya seperti ini:
if check_upstart_service ssh; then echo "running"; else echo "stopped"; fi
Berdasarkan String berisi dalam bash :
job='your_job_name'
job_status=$(status ${job})
if [[ ${job_status} == *running* ]]
then
# do whatever you need
else
# do whatever you need
fi
Dorongan pertama saya adalah menggunakan variasi kode yang disediakan 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
yang akan mengembalikan sesuatu seperti
metode pengirim kembali =: 1.0 -> dest =: 1.94 reply_serial = 2 varian string "running"
dan gunakan solusi di atas untuk memeriksa apakah string yang dikembalikan berisi "running". Namun demikian, pekerjaan itu tidak menjalankan panggilan dbus akan keluar dengan status 1 alih-alih mengembalikan "menunggu" seperti yang saya harapkan.
status ${job}
tidak akan pernah keluar dengan status 1 kecuali jika tidak ada pekerjaan seperti itu.
Anda akan menggunakan DBUS untuk menanyakan status layanan tertentu itu.
$ 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
Perhatikan bahwa jika Anda menulis pekerjaan pemula Anda sendiri, Anda harus menggunakan acara pemula atau dependensi paket sebagai gantinya.
Tampaknya perintah status pemula sesuai dengan spesifikasi skrip init dari proyek Linux Standard Base, artinya Anda dapat menganggap kode keluar 0 berarti program sedang berjalan, kode keluar 1-3 berarti sedang berjalan, dan apa saja kode keluar lain berarti status yang tidak ditentukan.
Lihat: 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
hanya untuk memastikan itu diam.