我想在 bash 上编写一个程序,每隔一段时间重新启动一次脚本。该程序以无限循环运行并按如下方式启动:
Python3 main.py
因此,要重新启动它,我需要
Kill [pid]
先执行,然后再重新启动它。那么我如何获取 pid?我过去常常手动重新启动,查看列表ps -ef
。我试图获取pidof python3
- 它给了我 5 个 pid,我不喜欢,因为我真的不明白我需要哪一个。如果我写类似的东西pidof "python3 main.py"
- 它找不到任何东西。
测试演示程序:
#!/bin/python3
import time
x = 1
while True:
print(x)
x +=1
time.sleep(10)
答案1
有几种方法,按优先顺序排列:
使用服务管理器,例如 systemd。服务管理器负责跟踪 PID,您只需告诉它按名称重新启动服务,例如:
systemctl --user restart MyScript
让脚本将其自己的 PID 写入“PID 文件”,然后您可以使用 shell 的 读取该文件
$(<file)
。脚本可以通过 访问其自己的 PIDos.getpid()
。kill $(< ~/myscript.pid)
使用 shell
&
将脚本作为后台作业运行,这样您可以$!
在作业生成后立即访问 PID。然后您可以将值写入$!
“PID 文件”(或者如果需要,可以立即在循环中使用它)。