zih*_*oyu 102 python cron service
我有Python脚本bgservice.py,我希望它一直运行,因为它是我构建的Web服务的一部分.即使在我注销SSH后,如何让它连续运行?
Mil*_*vić 36
首先,你需要添加一个shebang行,如下所示:
\n#!/usr/bin/env python3\nRun Code Online (Sandbox Code Playgroud)\n如果您安装了多个版本的 Python,则此路径是必需的,并且将确保采用环境变量/usr/bin/env中的第一个 Python 解释器。$$PATH您还可以对 Python 解释器的路径进行硬编码(例如#!/usr/bin/python3),但这并不灵活,并且不能在其他计算机上移植。接下来,您\xe2\x80\x99需要设置文件的权限以允许执行:
chmod +x test.py\nRun Code Online (Sandbox Code Playgroud)\n现在您可以使用nohup运行脚本,它会忽略挂断信号。这意味着您可以关闭终端而不停止执行。另外,不要忘记添加&,以便脚本在后台运行:
nohup /path/to/test.py &\nRun Code Online (Sandbox Code Playgroud)\n如果您没有添加shebang到文件中,您可以使用以下命令运行脚本:
nohup python /path/to/test.py &\nRun Code Online (Sandbox Code Playgroud)\n输出将保存在nohup.out文件中,除非您指定输出文件,如下所示:
nohup /path/to/test.py > output.log &\nnohup python /path/to/test.py > output.log &\nRun Code Online (Sandbox Code Playgroud)\n如果您已将命令的输出重定向到其他地方 - 包括/dev/null),那么它就会重定向到该位置。
# doesn\'t create nohup.out\n\nnohup command >/dev/null 2>&1 \nRun Code Online (Sandbox Code Playgroud)\n如果您正在使用nohup,这可能意味着您想通过放置另一个命令在后台运行该命令&整个命令的末尾放置另一个命令来在后台运行该命令:
# runs in background, still doesn\'t create nohup.out\n\n nohup command >/dev/null 2>&1 & \nRun Code Online (Sandbox Code Playgroud)\n您可以找到process及其process ID:
ps ax | grep test.py\n\n# or\n# list of running processes Python\n\nps -fA | grep python\nRun Code Online (Sandbox Code Playgroud)\nps代表process status
如果想停止执行,可以kill使用kill命令
\nkill PID\nRun Code Online (Sandbox Code Playgroud)\n
Coo*_*per 28
如果你已经开始了这个过程,并且不想杀死它并在nohup下重启,你可以将它发送到后台,然后将其取消.
Ctrl+Z (暂停过程)
bg (在后台重启该过程
disown %1(假设这是作业#1,用于jobs确定)
小智 18
替代答案:tmux
tmux在cmd中输入tmux在eg内启动您想要的进程python3 main.pytmux会议Ctrl+bd现在可以安全退出远程计算机了。当您回来时使用tmux attach重新进入tmux会话。
如果要启动多个会话,请使用Ctrl+bthen命名每个会话$。然后输入您的会话名称。
列出所有会话使用情况tmux list-sessions
要附加正在运行的会话,请使用tmux attach-session -t <session-name>.
Dus*_*and 10
描述你可能会考虑把您的Python脚本到合适的蟒蛇守护,这里.
python-daemon是一个很好的工具,可以用来运行python脚本作为后台守护进程而不是永远运行的脚本.您需要稍微修改现有代码,但其简单明了.
如果您遇到python-daemon的问题,还有另一个实用程序管理器会为您执行相同操作,但在这种情况下,您不必编写任何代码(或修改现有代码),因为这是一个开箱即用的daemonizing解决方案流程.
这是一个使用装饰器在python中的简单解决方案:
import os, time
def daemon(func):
def wrapper(*args, **kwargs):
if os.fork(): return
func(*args, **kwargs)
os._exit(os.EX_OK)
return wrapper
@daemon
def my_func(count=10):
for i in range(0,count):
print('parent pid: %d' % os.getppid())
time.sleep(1)
my_func(count=10)
#still in parent thread
time.sleep(2)
#after 2 seconds the function my_func lives on is own
Run Code Online (Sandbox Code Playgroud)
您当然可以替换bgservice.py文件的内容my_func.
尝试这个:
nohup python -u <your file name>.py >> <your log file>.log &
Run Code Online (Sandbox Code Playgroud)
您可以在屏幕中运行上述命令并退出屏幕。
现在您可以通过以下方式跟踪 python 脚本的日志:tail -f <your log file>.log
要终止脚本,可以使用ps -aux和Kill命令。
| 归档时间: |
|
| 查看次数: |
172563 次 |
| 最近记录: |