【问题标题】:linux daemon can't run python filelinux守护进程无法运行python文件
【发布时间】:2016-01-24 11:28:29
【问题描述】:

我正在使用带有 Raspbian 的树莓派,我尝试这样做:

我在etc/init.d中创建了一个文件myservice.sh

...
DIR=/var/www/MDH/python
DAEMON=$DIR/myserv.py
DAEMON_NAME=myserv
DAEMON_USER=pi
PIDFILE=/var/run/$DAEMON_NAME.pid
...
do_start () {
echo "Starting system do_start $DAEMON_NAME daemon"
start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON -- $DAEMON_OPTS
echo "Started $DAEMON"
}
do_stop () {
...
ccase "$1" in

start|stop)
    do_${1}
    ;;

restart|reload|force-reload)
    do_stop
    do_start
    ;;

status)
    status_of_proc "$DAEMON_NAME" "$DAEMON" && exit 0 || exit $?
    ;;

*)
    echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|restart|status}"
    exit 1
    ;;

esac
exit 0

当我运行sudo service /etc/init.d/myservice.sh start 时,提示正常:

Starting system do_start myserv daemon
. ok
Started /var/www/MDH/python/myserv.py

但是如果我执行 sudo service /etc/init.d/myservice.sh status 我的脚本没有运行:

[FAIL] /var/www/MDH/python/myserv.py is not running ... failed!

如果我尝试使用 python /var/www/MDH/python/myserv.py 运行 python 脚本并且它工作正常。

实现日志或更好地调试脚本的任何想法。

【问题讨论】:

  • 对不起我的第一个问题我的标题错误“...无法运行 python 文件”
  • 您可以编辑原始问题以澄清它,而不是使用 cmets。此外,service 只是运行相应的脚本,您可以运行/etc/init.d/foo start 而不是service foo start,这样可以进一步减少重现问题所需的代码。也就是说,到目前为止,您没有提供足够的信息,请参阅发布指南。
  • 我最近开始使用linux,但我不太了解......这就是我写任何想法以更好地调试脚本并发布更详细信息的原因。谢谢你的提示service foo start
  • @UlrichEckhardt 的建议很好。另外... $PIDFILE 是如何定义的?通常 pid 文件应该是 /var/run/*service*.pid 检查定义,如果/当它正常时,查看 /var/run 以查看文件是否存在并且它包含正在运行的服务的 pid .
  • 是的,PIDFILE 是我在主帖中定义的,在/var/run/myserv.pid 中有一个数字:18895 并在每次服务启动时更改广告。

标签: python linux raspberry-pi daemon


【解决方案1】:

我已将 python 中的脚本移动到用户文件夹中: \home\pi\

我的脚本的执行权限 chmod +e myserv.py

我也在 myservice.sh 中添加:

#-------------------------------------------------------------
#! /bin/sh
### BEGIN INIT INFO
# Provides: MDH daemon
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: daemon MDH 0.1
# Description: bla bla bla... MDH.
### END INIT INFO

现在 服务 myservice.sh 启动

python 脚本运行正常,状态、停止和重启运行良好。 为什么文件夹 /var/www/MDH/python/myserv.py 不起作用???

【讨论】: