在 Raspbian 上启动一个简单的 HTTP 服务器作为服务

Starting a simple HTTPServer as a service on Raspian

首先让我说这不是一个生产系统,我无意将它变成一个!

我有两个脚本:

/home/pi/start.sh(root 拥有):

#!/bin/bash
cd "$(dirname "[=10=]")"
/usr/bin/python3 poolMonitor.py

和 /home/pi/stop.sh(由 root 拥有):

#!/bin/bash
sudo killproc -k -n poolMonitor.py

我有文件 /etc/init.d/poolMonitor(root 拥有):

#!/bin/bash
### BEGIN INIT INFO
# Provides: Pool Monitor
# Required-Start:    $all
# Required-Stop: 
# Default-Start:     5 
# Default-Stop:      6 
# Starts the Pool Monitor service
### END INIT INFO



start() {
        echo -n "Starting : "
        /home/pi/poolMonitor/start.sh
        return
}

stop() {
        echo -n "Shutting down : "
        /home/pi/poolMonitor/stop.sh
        return
}

case "" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
    status poolMonitor
        ;;
    restart)
        stop
        start
        ;;
    *)
        echo "Usage:  {start|stop|status|reload|restart[|probe]"
        exit 1
        ;;
esac
exit $?

我在 init.d 中安装了这样的服务:

sudo update-rc.d poolMonitor defaults

我可以成功 运行(启动和停止网络服务器并且我能够浏览到它):

sudo /home/pi/poolMonitor/start.sh
sudo /home/pi/poolMonitor/stop.sh
sudo service poolMonitor stop
sudo service poolMonitor start

请注意,由于 HTTPServer 的性质,start.sh 永远不会 returns。我尝试在 start.sh 文件的行尾添加一个符号:

/usr/bin/python3 poolMonitor.py &

我遇到的问题是它在重启后无法启动(无论是否存在&符号)。

创建系统服务

要将脚本转换为服务,请创建 .service 文件:

vi /home/pi/poolMonitor.service

将此结构添加到 poolMonitor.service

[Unit]
Description=Pool Monitor 
After=network-online.target
 
[Service]
ExecStart=/usr/bin/python3 /home/pi/poolMonitor.py
WorkingDirectory=/home/pi
StandardOutput=inherit
StandardError=inherit
Restart=always
 
[Install]
WantedBy=multi-user.target

将文件复制到/lib/systemd/system

sudo cp /home/pi/poolMonitor.service /lib/systemd/system/

测试服务

sudo systemctl start poolMonitor.service

停止使用:

sudo systemctl stop poolMonitor.service

使用以下命令使您的服务在重启时自动启动:

sudo systemctl enable poolMonitor.service

从现在开始您可以使用:

sudo service poolMonitor status/start/stop