Python3脚本作为deamon(通过systemctl)及其依赖项

时间:2018-01-11 17:14:41

标签: python python-3.x

我不是python开发人员。 我尝试在启动机器期间启动python Web服务器脚本(https://github.com/rpiwalletui/qtum-ui)(raspbian stretch)。

我准备了一个init-d脚本,它似乎进行了有效的尝试,但是python脚本报告了缺少的依赖项。

如果我直接运行python3脚本,它可以正常工作。 但是尝试使用init.d systemctl脚本运行它时脚本失败并显示以下日志:

Jan 11 17:05:07 raspberrypi systemd[1]: Starting qtumui.service...
Jan 11 17:05:07 raspberrypi qtumui[12111]: Starting /home/pi/qtum-ui/app.py:Traceback (most recent call last):
Jan 11 17:05:07 raspberrypi qtumui[12111]:   File "/home/pi/qtum-ui/app.py", line 3, in <module>
Jan 11 17:05:07 raspberrypi qtumui[12111]:     from flask import Flask, render_template, request, flash, url_for, redirect, send_file
Jan 11 17:05:07 raspberrypi qtumui[12111]: ImportError: No module named 'flask'
Jan 11 17:05:07 raspberrypi qtumui[12111]:  failed!
Jan 11 17:05:07 raspberrypi systemd[1]: Started qtumui.service.

这是init.d脚本

#! /bin/sh

PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/home/pi/qtum-ui/app.py
PIDFILE=/var/run/qtumui.pid

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

case "$1" in
  start)
     log_daemon_msg "Starting $DAEMON"
     start_daemon -p $PIDFILE $DAEMON
     log_end_msg $?
   ;;
  stop)
     log_daemon_msg "Stopping $DAEMON"
     killproc -p $PIDFILE $DAEMON
     PID=`ps x |grep qtum | head -1 | awk '{print $1}'`
     kill -9 $PID
     log_end_msg $?
   ;;
  force-reload|restart)
     $0 stop
     $0 start
   ;;
  status)
     status_of_proc -p $PIDFILE $DAEMON atd && exit 0 || exit $?
   ;;
 *)
   echo "Usage: /etc/init.d/qtumui {start|stop|restart|force-reload|status}"
   exit 1
  ;;
esac

exit 0

有什么东西可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

好的,我设法找出了为什么缺少依赖项。 我使用“pip3”将依赖项安装为用户“pi”,在这种情况下,模块已安装到/home/pi/.local/lib/python3.5/dist-packages/中。

init脚本作为其他默认用户(可能是root)运行,这就是脚本无法找到依赖项的原因。

要解决此问题,我需要将init-d脚本更改为以“pi”用户身份运行,但如果我以root身份安装所需的依赖项,则脚本也可以正常工作

sudo pip3 install flask Flask-WTF Flask-QRcode Flask-Bootstrap

在这种情况下,模块也可以在/usr/local/lib/python3.5/dist-packages/中找到它的工作,因为一些所有权冲突,但服务起码至少。