启动/停止后台Python进程,不使用nohup+ps aux grep+ki

2024-09-30 02:15:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我通常使用:

nohup python -u myscript.py &> ./mylog.log &       # or should I use nohup 2>&1 ? I never remember

启动一个后台Python进程,即使我注销,我也要继续运行该进程,并且:

ps aux |grep python
# check for the relevant PID
kill <relevantPID>

这很管用,但是做这些步骤很烦人。

我读过一些方法,其中您需要将PID保存在某个文件中,但这更麻烦。


是否有一个干净的方法可以轻松地启动/停止Python脚本?例如:

startpy myscript.py             # will automatically continue running in
                                # background even if I log out

# two days later, even if I logged out / logged in again the meantime
stoppy myscript.py

或者这个长的部分nohup python -u myscript.py &> ./mylog.log &可以用脚本的shebang编写,这样我就可以用./myscript.py轻松地启动脚本,而不是编写长的nohup行吗?


注意:我正在寻找一个一两行的解决方案,我不想为这个操作编写一个专用的systemd服务


Tags: the方法inpy脚本logif进程
2条回答

据我所知,只有两个(或者三个或者四个?)在远程系统上运行后台脚本问题的解决方案。

1)nohup

nohup python -u myscript.py > ./mylog.log  2>&1 &

1之二)否认

与上面一样,略有不同,因为它实际上将程序删除到shell作业列表中,从而阻止发送SIGHUP。

2)屏幕(或由neared建议的tmux)

Here您将找到屏幕的起点。

有关后台进程如何工作的详细说明,请参见post。另一个相关的post

3)猛击

另一个解决方案是编写两个bash函数来完成此任务:

mynohup () {
    [[ "$1" = "" ]] && echo "usage: mynohup python_script" && return 0
    nohup python -u "$1" > "${1%.*}.log" 2>&1 < /dev/null &
}

mykill() {
    ps -ef | grep "$1" | grep -v grep | awk '{print $2}' | xargs kill
    echo "process "$1" killed"
}

只需将上述函数放在~/.bashrc~/.bash_profile中,并将它们用作常规bash命令。

现在你可以照你说的做了:

mynohup myscript.py             # will automatically continue running in
                                # background even if I log out

# two days later, even if I logged out / logged in again the meantime
mykill myscript.py

4)后台程序

这个daemon module非常有用:

python myscript.py start

python myscript.py stop

你的意思是远程登录和退出(例如通过SSH)?如果是这样,一个简单的解决方案是安装tmux(终端多路复用器)。它为作为客户机在其下运行的终端创建一个服务器。使用tmux打开tmux,键入命令,键入CONTROL+B+D以“分离”tmux,然后在主终端键入exit以注销。当您重新登录时,tmux及其运行的进程仍将运行。

相关问题 更多 >

    热门问题