まず、質問が比較的幅広い場合は謝ります。おそらく誰かがそれに応じて言葉を改めることができます。Bash ifステートメントは一度だけ真実であることを証明します
私はbashのスキルを詳しく説明するために以下のスクリプトを書いていますが、ifステートメントは手動で「監視する」という意味のPythonスクリプトを手動で起動した場合にのみ真となります。
bash script = run_deamon.sh
python script = deamon.py
私は手動で./run_deamon.sh bashスクリプトを実行して手動で、その後./deamon.py実行している場合は、 "Pythonが...ランニングdeamon.py" アウトエコー表示します。私はその後、deamon.pyプロセスとbashスクリプトのechos "Starting Python deamon.py ..."を終了します。 bashスクリプトがdeamon.pyを起動した後も、 "Python deamon.py running ..."とエッチしなくなりました。誰かが私が間違っていることを説明できますか?
私は出力にbashスクリプトをしたいと思います:
Python deamon.py running...
Python deamon.py running...
Python deamon.py running... (I now kill deamon.py)
Starting Python deamon.py...
Python deamon.py running...
Python deamon.py running...
等...
を私は次のことを試してみました:
while true; do
if [[ $(ps ax | grep 'deamon.py$') ]]; then
echo Python deamon.py running...;
else
echo Starting Python deamon.py...;
/home/bang/Documents/Python/./deamon.py;
fi
sleep 1
done
と
while true; do
if [[ $(ps ax | grep 'deamon.py$') ]]; then
echo Python deamon.py is running...;
fi
if ! [[ $(ps ax | grep 'deamon.py$') ]]; then
echo Starting Python deamon.py...;
/home/bang/Documents/Python/./deamon.py;
fi
sleep 1;
done
同じ動作を。
誰かが正しい方向に私を指すことができれば、それは非常に感謝しています。
編集#1
私は
if [[ $(ps ax | grep 'deamon.py$' | grep -v grep) ]]; then
と
if [[ $(ps ax | pgrep -f 'deamon.py$' ]]; then
同じ結果を使用。私はPythonスクリプトにprint文を追加し、現在bashスクリプトはprint文をエコーされます。
23
24
25
Starting Python deamon.py...
0
1
2
3
これは私のPythonスクリプトです:
from time import sleep
x = 0
while True:
print(x)
if x == 25:
exit(0)
x += 1
sleep(1)
「デーモン」の綴りは、「ea」ではなく「ae」であることに注意してください。 –