Pythonスクリプトを実行しているBashスクリプトでは、「stop」コマンドを使用できません。

Pythonスクリプトを実行しているBashスクリプトでは、「stop」コマンドを使用できません。

バックグラウンドで実行し続けたいPythonスクリプトを呼び出すbashスクリプトがあります。 bashスクリプトを起動してPythonスクリプトを実行できますが、bashスクリプトの「stop」コマンドを使用して停止することはできません。

Bashスクリプトは次のとおりです。

#!/bin/bash

 case $1 in
    start)
       echo 'Running test.py'
       exec 2>&1 /opt/anaconda3/envs/my_env/bin/python /home/my_name/scripts/test.py &
       echo 'Assigning pid'
       echo $! > /home/my_name/scripts/test.pid;;
     stop)
       kill 'cat /home/my_name/scripts/test.pid';;
       
     *)
       echo "usage: "$1" {start|stop}" ;;
 esac
 exit 0

以下はPythonスクリプトです。

import time
from pathlib import Path

count = 0 
while True:
    with open(Path(__file__).parent.resolve() / "test.txt", 'a') as f:
        f.write(str(count))
    count += 1
    time.sleep(1)

Pythonコードはうまく動作するので、あまり議論する価値はありません。毎秒テキストファイルに整数を書き、毎回1ずつ増やします。

Pythonスクリプトとbashスクリプトを含むフォルダからコマンドラインで取得したものは次のとおりです。

$ sudo ./test.sh start
Running test.py
Assigning pid
$ sudo ./test.sh stop
./test.sh: line 10: kill: cat /home/my_name/scripts/test.pid: arguments must be process or job IDs
$ ps -aux | grep test
root      91366  0.1  0.0  26704  9320 pts/6    S    19:39   0:00 /opt/anaconda3/envs/my_env/bin/python /home/my_name/scripts/test.py
VEIC\da+  92004  0.0  0.0  14436  1012 pts/11   S+   19:41   0:00 grep --color=auto test
$ cat test.pid
91366

test.pidこれにより、pidファイルに書き込まれたpidがコマンドで表示されたpidと一致することがわかりますps -aux | grep test。ただし、bashスクリプトでコマンドを使用しようとすると、stoppidファイルの内容がプロセスまたはジョブIDではないというメッセージが表示されます。

私は最終的にこれをMonitと一緒に使いたいのですが、そうする前にこのbashスクリプトの難しさを克服する必要があります。どんな助けでも大変感謝します!

ベストアンサー1

  kill 'cat /home/my_name/scripts/test.pid';;

あなたはそれをしたいかもしれません:

  kill `cat /home/my_name/scripts/test.pid`;;

(一重引用符の代わりに逆引用符)

おすすめ記事