スクリプトが実行されていない場合は、どのように確認して実行しますか?

スクリプトが実行されていない場合は、どのように確認して実行しますか?

main_start_scriptバックグラウンドで2つのPythonプログラムを実行する非常に簡単なスクリプトを作成しました。コードは次のとおりです。

python /opt/cuckoo/cuckoo-2/cuckoo.py 1>cuckoo_script/cuckoo_start.txt 2>&1 &
python /opt/cuckoo/cuckoo-2/utils/web.py 1>cuckoo_script/web_start.txt 2>&1 &

これで、これら2つのプログラムが実行されているかどうかを確認する方法と、そうでない場合はスクリプトを実行して起動する方法を知りたいと思います。

人々は確認のために「Puppet」を使用するのが良いと聞きましたが、これまで役立つチュートリアルを見つけることができませんでした。

答え1

これを見て同様の電卓の質問。このpgrepコマンドは、実行中のプロセスが存在することを確認できます。

このコマンドは、pgrep -f <file>指定されたファイルの現在のインスタンス数を返します。たとえば、

[user@localhost ~]$ pgrep -f /sbin/init
1
[user@localhost ~]$

ファイルがプロセスに関連付けられていない場合は何も返されません。

まだ実行されていない場合は、それを実行するbashスクリプトに統合できます。

#!/bin/bash
if [[ ! $(pgrep -f script.sh) ]]; then
    script.sh
fi

答え2

bashの特殊シェルvar '$!'を使用して、各コマンドのPID番号を保存します。これは最後のコマンドのプロセスpidです。その後、コマンドを再実行する前に「/proc/PID」があることを確認してください。

#!/bin/bash

do_cuckoo() {
  python /opt/cuckoo/cuckoo-2/cuckoo.py 1>cuckoo_script/cuckoo_start.txt 2>&1 & echo $! >/tmp/cuckoo.pid
}
do_web() {
  python /opt/cuckoo/cuckoo-2/utils/web.py 1>cuckoo_script/web_start.txt 2>&1 & echo $! >/tmp/web.pid
}

do_cuckoo && do_web # First time run

# You should add a proper sleep timer below.
while :; do
  [ ! -d /proc/$(</tmp/cuckoo.pid) ] && do_cuckoo
  [ ! -d /proc/$(</tmp/web.pid) ] && do_web
done

おそらく、whileループの代わりに「until」を使用する方が良いかもしれません。その仕事はあなたに任せます;)

関連情報