我有一个名为kill.sh的shell脚本,它可以帮助我重新启动我编写的Python脚本。我通常使用pkill -f main.py来终止我的永久运行的python脚本。但是,当我将其写入shell脚本时,它不起作用。我的剧本
kill.sh
pkill -f main.py
pkill -f main.py ps aux | grep main.py # Still shows the process running.
虽然只是在bash命令行中执行pkill -f main.py可以按预期工作。这是为什么呢?
zlwx9yxi1#
这不是一个令人满意的答案,因为我无法找出pkill -f在脚本中不工作的根本原因。我最终使用了一个systemd服务文件来管理我的python进程。这里有一个例子。
pkill -f
systemd
[Unit] Description=Service Name [Service] Environment=PYTHONUNBUFFERED=1 ExecStart=/path/to/python /path/to/python/script.py Restart=on-failure RestartSec=5s WorkingDirectory=/python/project/dir/
将文件命名为main.service,并将其放在/lib/systemd/system/中
main.service
/lib/systemd/system/
systemctl start main.service
systemctl stop main.service
systemctl restart main.service
systemctl status main.service -l
现在我不必担心多个进程运行。如果程序死了,它甚至会重新启动。
tnkciper2#
有同样的问题。发现脚本是在windows中编辑的,行尾有那个额外的字符,而且它把pkill弄乱了。刚刚在Linux编辑器中编辑了脚本,现在工作正常。
2条答案
按热度按时间zlwx9yxi1#
这不是一个令人满意的答案,因为我无法找出
pkill -f
在脚本中不工作的根本原因。我最终使用了一个systemd
服务文件来管理我的python进程。这里有一个例子。将文件命名为
main.service
,并将其放在/lib/systemd/system/
中systemctl start main.service
systemctl stop main.service
systemctl restart main.service
systemctl status main.service -l
现在我不必担心多个进程运行。如果程序死了,它甚至会重新启动。
tnkciper2#
有同样的问题。发现脚本是在windows中编辑的,行尾有那个额外的字符,而且它把pkill弄乱了。刚刚在Linux编辑器中编辑了脚本,现在工作正常。