pkill -f不能从shell脚本内部工作

gojuced7  于 2023-06-06  发布在  Shell
关注(0)|答案(2)|浏览(176)

我有一个名为kill.sh的shell脚本,它可以帮助我重新启动我编写的Python脚本。我通常使用pkill -f main.py来终止我的永久运行的python脚本。但是,当我将其写入shell脚本时,它不起作用。
我的剧本

pkill -f main.py
ps aux | grep main.py # Still shows the process running.

虽然只是在bash命令行中执行pkill -f main.py可以按预期工作。这是为什么呢?

zlwx9yxi

zlwx9yxi1#

这不是一个令人满意的答案,因为我无法找出pkill -f在脚本中不工作的根本原因。我最终使用了一个systemd服务文件来管理我的python进程。这里有一个例子。

[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/

  • 运行服务systemctl start main.service
  • 停止服务systemctl stop main.service
  • 重新启动服务systemctl restart main.service
  • 显示状态和输出systemctl status main.service -l

现在我不必担心多个进程运行。如果程序死了,它甚至会重新启动。

tnkciper

tnkciper2#

有同样的问题。发现脚本是在windows中编辑的,行尾有那个额外的字符,而且它把pkill弄乱了。刚刚在Linux编辑器中编辑了脚本,现在工作正常。

相关问题