在 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
首先让我说这不是一个生产系统,我无意将它变成一个!
我有两个脚本:
/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