Linux
不能在執行 Python 腳本的 Bash 腳本中使用“停止”命令
我有一個 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 文件的 pid
test.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`;;
(反引號而不是單引號)