Jo *_* Ko 13 python linux ubuntu nohup python-2.7
我有一个python脚本,practice_one.py我希望它在Ubuntu Linux中永远运行,并具有以下内容:
while True:
# Code
Run Code Online (Sandbox Code Playgroud)
我尝试了nohup python practice_one.py &但得到了消息nohup: ignoring input and appending output to ‘nohup.out’.
然后当我按下回车键时,输出另一条消息: [1]+ Exit nohup python practice_one.py
怎么会自动退出?我能做错什么?
编辑
尝试:
nohup python practice_one.py </dev/null &>/dev/null &
并获得[1] 61122然后当我按回车键我有[1]+ Exit nohup python practice_one.py </dev/null &>/dev/null &
它曾经工作但现在退出..现在可能是什么问题?
我通常在三种情况下面对这种情况:
当while循环中发生异常时.
在代码中的某处我有pdb.set_trace()这是一个调试断点.
在代码中的某处,请求来自用户的输入,如raw_input("请输入内容:")
检查您的代码以排除这三个原因.
不要担心第一条消息,它只是告诉你nohup在工作.
编辑
nohup确保脚本本身正常工作(这实际上是第一次尝试).我建议您最好使用double fork magic长时间运行的程序作为守护进程而不是nohup.它易于调试,您的程序不需要外部工具nohup.
daemon.py
import sys
import os
# double fork magic
def daemonize():
os.umask(0)
try:
pid = os.fork()
except OSError:
sys.exit(0)
if pid > 0:
sys.exit(0)
os.setsid()
try:
pid = os.fork()
except OSError:
sys.exit(0)
if pid > 0:
os._exit(0)
os.chdir('/')
import resource # Resource usage information.
maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]
if (maxfd == resource.RLIM_INFINITY):
maxfd = 1024
# Iterate through and close all file descriptors.
for fd in range(0, maxfd):
try:
os.close(fd)
except OSError: # ERROR, fd wasn't open to begin with (ignored)
pass
fd = os.open(os.devnull, os.O_RDWR)
os.dup2(fd, sys.stdin.fileno())
os.dup2(fd, sys.stdout.fileno())
os.dup2(fd, sys.stderr.fileno())
Run Code Online (Sandbox Code Playgroud)
test.py
from daemon import daemonize
import time
def test():
while True:
time.sleep(10)
if __name__ == '__main__':
daemonize() # you could comment this line before you make sure your program run as you expect
test()
Run Code Online (Sandbox Code Playgroud)
现在,使用python test.py它作为守护进程运行,您可以使用ps aux | grep test.py它来检查它.
第一个不是错误 - 它只是意味着 nohup 将捕获 STDOUT 并将其存储在 nohup.out 中。如果您想将所有内容静音,请使用:
nohup python practice_one.py &>/dev/null
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2025 次 |
| 最近记录: |