Bagaimana Anda menentukan apakah pekerjaan pemula berjalan di dalam skrip Bash? Itu saya perlu nilai "boolean" untuk melakukan sesuatu seperti:
#!/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
hanya untuk memastikan itu diam.Biasanya Anda menggunakan file PID tetapi Anda juga dapat menggunakan pgrep untuk memeriksa proses Anda. Anggap layanan Anda disebut
jobX
ini akan berfungsi:Atau bahkan lebih baik
sumber
Berdasarkan String berisi dalam bash :
Dorongan pertama saya adalah menggunakan variasi kode yang disediakan ImaginaryRobots
yang akan mengembalikan sesuatu seperti
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.sumber
Anda akan menggunakan DBUS untuk menanyakan status layanan tertentu itu.
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.
sumber
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
sumber