Bash komut dosyasında uptart işinin durumu nasıl belirlenir?


10

Bir Bash betiğinin içinde bir uptart işinin çalışıp çalışmadığını nasıl belirlersiniz? Bunun gibi bir şey yapmak için bir "boolean" değerine ihtiyacım var:

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

Yanıtlar:


9

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

2
status $1 2> /dev/null | grep -q "^$1 start" > /dev/null 2> /dev/nullSessiz olduğundan emin olmak için bunu değiştirmek isteyebilirsiniz .
David G

1

Normalde bir PID dosyası kullanırsınız, ancak işlemlerinizi denetlemek için pgrep kullanabilirsiniz. Hizmetinizin çağrıldığını varsayalım jobX:

if [ $(pgrep jobX) ]; then

Ya da daha iyisi

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

1

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ı.


1
Bir varyasyon ... isRunning = $ (durum $ {job} | grep running | wc -l) çalışıyorsa 1, çalışmıyorsa 0 döndürür.
Naraen

0

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.


Bu sadece bir boole değeri elde etmek için ayrıştırmak zorunda kalacak bir tür metin durumu yazdırmak gibi görünüyor, değil mi?
laslowh

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.