我从here复制了以作为守护进程运行Python代码。 为了延长正常运行时间。我想最好使用supervisor来保持这个守护进程的运行。
我做到了。 python_deamon.conf
[program:python_deamon]
directory=/usr/local/python_deamon/
command=/usr/local/python_venv/bin/python daemon_runnner.py start
stderr_logfile=/var/log/gunicorn.log
stdout_logfile=/var/log/gunicorn.log
autostart=true
autorestart=true
问题是,尽管supervisor成功地启动了python_守护进程,但它仍在重试。
2015-09-23 16:10:45,592 CRIT Supervisor running as root (no user in config file)
2015-09-23 16:10:45,592 WARN Included extra file "/etc/supervisor/conf.d/python_daemon.conf" during parsing
2015-09-23 16:10:45,592 INFO RPC interface 'supervisor' initialized
2015-09-23 16:10:45,592 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2015-09-23 16:10:45,592 INFO supervisord started with pid 13880
2015-09-23 16:10:46,595 INFO spawned: 'python_deamon' with pid 17884
2015-09-23 16:10:46,611 INFO exited: python_deamon (exit status 1; not expected)
2015-09-23 16:10:47,614 INFO spawned: 'python_deamon' with pid 17885
2015-09-23 16:10:47,630 INFO exited: python_deamon (exit status 1; not expected)
2015-09-23 16:10:49,635 INFO spawned: 'python_deamon' with pid 17888
2015-09-23 16:10:49,656 INFO exited: python_deamon (exit status 1; not expected)
2015-09-23 16:10:52,662 INFO spawned: 'python_deamon' with pid 17891
2015-09-23 16:10:52,680 INFO exited: python_deamon (exit status 1; not expected)
2015-09-23 16:10:53,681 INFO gave up: python_deamon entered FATAL state, too many start retries too quickly
为了记录重写后的run()
方法,我从不返回任何内容。
有没有可能做我想做的事,或者我是在装傻?
p.S:我知道整个问题的根本原因是,由于run()从不返回任何主管一直试图启动它,因此认为进程失败,并将状态设为FATAL Exited too quickly (process log may have details)
。
我真正的问题是我做得对吗?或者可以这样做?
p.p.S:独立(不带主管)daemon_runnner.py
在有和没有sudo权限的情况下运行良好。
这是我通常做的:
service.conf
文件。这个脚本引用了shell脚本,它实际上是启动Python脚本的脚本。这个.conf
文件位于/etc/supervisor/conf.d
chmod 755 service.sh
。在这个脚本中,我们实际上启动了Python脚本。服务配置
服务.sh
您的脚本将失败并显示退出状态。主管只是试图重新启动脚本。
Supervisor是以根权限启动的,可能它正在授予脚本这些权限,这会导致脚本失败(源目录中的更改或其他内容)。检查在没有主管的情况下以根用户身份运行守护程序时会发生什么。
我们真的需要更多的信息来了解它失败的原因。
尝试设置startsecs=0:
程序在启动后需要保持运行以认为启动成功的总秒数。如果程序在启动后的几秒钟内没有保持运行,即使它以“预期的”退出代码退出(请参阅exitcodes),启动也将被视为失败。设置为0表示程序不需要在任何特定时间内保持运行。
相关问题 更多 >
编程相关推荐