and*_*d3p 9 python upstart werkzeug
我用werkzeug创建了小型web服务器,我可以用普通的python方式运行它python my_server.py.页面加载,一切正常.现在我想在我的电脑启动时启动它.最简单的方法是什么?我一直在与暴发户挣扎,但它似乎并没有"生活在后台"因为我执行后start my_server立即收到kernel: [ 8799.793942] init: my_server main process (7274) terminated with status 1
my_server.py:
...
if __name__ == '__main__':
from werkzeug.serving import run_simple
app = create_app()
run_simple('0.0.0.0', 4000, app)
Run Code Online (Sandbox Code Playgroud)
upstart配置文件my_server.conf:
description "My service"
author "Some Dude <blah@foo.com>"
start on runlevel [2345]
stop on runlevel [016]
exec /path/to/my_server.py
start on startup
Run Code Online (Sandbox Code Playgroud)
任何想法如何使其工作?或者任何其他更好的守护脚本的方法?
更新:
我认为问题在于my_server.py.它似乎并不首先启动Web服务器(方法run_simple()).应该采取哪些步骤使.py文件由任务处理程序(如upstart)运行?
#!/usr/bin/env pythonchmod 755解决:
问题是缺少python依赖.通过任务管理器(例如upstart或start-stop-daemon)启动脚本时,不会抛出任何错误.需要绝对确定pythonpath包含您需要的一切.
tvu*_*min 17
除了gg.kaspersky方法,您还可以将脚本转换为"服务",以便您可以使用以下命令启动或停止它:
$ sudo service myserver start
* Starting system myserver.py Daemon [ OK ]
$ sudo service myserver status
* /path/to/myserver.py is running
$ sudo service myserver stop
* Stopping system myserver.py Daemon [ OK ]
Run Code Online (Sandbox Code Playgroud)
并使用以下命令将其定义为启动服务:
$ sudo update-rc.d myserver defaults
Run Code Online (Sandbox Code Playgroud)
为此,您必须创建此文件并将其保存在/etc/init.d/中.
#!/bin/sh -e
DAEMON="/path/to/myserver.py"
DAEMONUSER="myuser"
DAEMON_NAME="myserver.py"
PATH="/sbin:/bin:/usr/sbin:/usr/bin"
test -x $DAEMON || exit 0
. /lib/lsb/init-functions
d_start () {
log_daemon_msg "Starting system $DAEMON_NAME Daemon"
start-stop-daemon --background --name $DAEMON_NAME --start --user $DAEMONUSER --exec $DAEMON
log_end_msg $?
}
d_stop () {
log_daemon_msg "Stopping system $DAEMON_NAME Daemon"
start-stop-daemon --name $DAEMON_NAME --stop --retry 5 --name $DAEMON_NAME
log_end_msg $?
}
case "$1" in
start|stop)
d_${1}
;;
restart|reload|force-reload)
d_stop
d_start
;;
force-stop)
d_stop
killall -q $DAEMON_NAME || true
sleep 2
killall -q -9 $DAEMON_NAME || true
;;
status)
status_of_proc "$DAEMON_NAME" "$DAEMON" "system-wide $DAEMON_NAME" && exit 0 || exit $?
;;
*)
echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|force-stop|restart|reload|force-reload|status}"
exit 1
;;
esac
exit 0
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我假设你在python文件的头部有一个类似#!/ usr/bin/python的shebang,这样你就可以直接执行它了.
最后但同样重要的是,不要忘记给你的python服务器和服务脚本赋予执行权限:
$ sudo chmod 755 /etc/init.d/myserver
$ sudo chmod 755 /path/to/mserver.py
Run Code Online (Sandbox Code Playgroud)
这是我最初学习这个页面的地方(法语).
干杯.
kas*_*sky 11
一个简单的方法是使用crontab:
$ crontab -e
Run Code Online (Sandbox Code Playgroud)
将出现一个crontab文件进行编辑,在末尾写入行:
@reboot python myserver.py
Run Code Online (Sandbox Code Playgroud)
并退出.现在,每次重启后,cron守护程序将运行myserver python脚本.
| 归档时间: |
|
| 查看次数: |
21199 次 |
| 最近记录: |