Linux

不能在執行 Python 腳本的 Bash 腳本中使用“停止”命令

  • April 8, 2021

我有一個 bash 腳本,它呼叫我希望在後台連續執行的 Python 腳本。我可以啟動 bash 腳本,並且 Python 腳本執行,但我無法使用帶有 bash 腳本的“停止”命令來停止它。

這是 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 程式碼執行良好,因此不值得過多討論。它只是每秒將一個整數寫入文本文件,每次遞增一。

這是我從包含 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

因此,您可以看到寫入 pid 文件的 pidtest.pid與命令顯示的 pid 匹配ps -aux | grep test。但是,當嘗試將stop命令與 bash 腳本一起使用時,我被告知 pid 文件的內容不是程序或作業 ID。

我最終希望將它與 Monit 結合使用,但在我這樣做之前需要克服這個 bash 腳本困難。任何幫助將不勝感激!

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

您可能希望它是:

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

(反引號而不是單引號)

引用自:https://unix.stackexchange.com/questions/644210