systemd:将 start/stop 传递给服务
systemd: Pass start/stop to service
我正在尝试创建一个用于启动和停止 softether VPN 服务器的 systemd 初始化脚本。
一个 tutorial 我发现建议遵循 init.d 脚本。
#!/bin/sh
# chkconfig: 2345 99 01
# description: SoftEther VPN Server
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/subsys/vpnserver
test -x $DAEMON || exit 0
case "" in
start)
$DAEMON start
touch $LOCK
;;
stop)
$DAEMON stop
rm $LOCK
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
;;
*)
echo "Usage: [=11=] {start|stop|restart}"
exit 1
esac
exit 0
但是我想用systemd,所以我写了下面的服务文件。
[Unit]
Description=Softether VPN server
After=syslog.target
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300
[Install]
WantedBy=multi-user.target
但是这个脚本没有保留 VPN 服务器 运行。 sudo systemctl status softethervpn
给我以下状态。
● softethervpn.service - Softether VPN server
Loaded: loaded (/lib/systemd/system/softethervpn.service; disabled)
Active: deactivating (stop) since Mon 2016-04-18 19:11:41 CEST; 1s ago
Process: 1463 ExecStart=/usr/local/vpnserver/vpnserver start (code=exited, status=0/SUCCESS)
Main PID: 1463 (code=exited, status=0/SUCCESS); : 1474 (vpnserver)
CGroup: /system.slice/softethervpn.service
├─1471 /usr/local/vpnserver/vpnserver execsvc
└─control
└─1474 /usr/local/vpnserver/vpnserver stop
Apr 18 19:11:40 raspberrypi systemd[1]: Started Softether VPN server.
Apr 18 19:11:41 raspberrypi vpnserver[1463]: The SoftEther VPN Server service has been started.
Apr 18 19:11:42 raspberrypi vpnserver[1474]: Stopping the SoftEther VPN Server service ...
Apr 18 19:11:42 raspberrypi vpnserver[1474]: SoftEther VPN Server service has been stopped.
我需要如何更正我的服务文件才能正常工作?
看来 Type
需要 forking
。以下脚本对我有用(在 SoftEther Configurationfile for Systemd 找到)。
[Unit]
Description=SoftEther VPN Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
[Install]
WantedBy=multi-user.target
我正在尝试创建一个用于启动和停止 softether VPN 服务器的 systemd 初始化脚本。
一个 tutorial 我发现建议遵循 init.d 脚本。
#!/bin/sh
# chkconfig: 2345 99 01
# description: SoftEther VPN Server
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/subsys/vpnserver
test -x $DAEMON || exit 0
case "" in
start)
$DAEMON start
touch $LOCK
;;
stop)
$DAEMON stop
rm $LOCK
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
;;
*)
echo "Usage: [=11=] {start|stop|restart}"
exit 1
esac
exit 0
但是我想用systemd,所以我写了下面的服务文件。
[Unit]
Description=Softether VPN server
After=syslog.target
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300
[Install]
WantedBy=multi-user.target
但是这个脚本没有保留 VPN 服务器 运行。 sudo systemctl status softethervpn
给我以下状态。
● softethervpn.service - Softether VPN server
Loaded: loaded (/lib/systemd/system/softethervpn.service; disabled)
Active: deactivating (stop) since Mon 2016-04-18 19:11:41 CEST; 1s ago
Process: 1463 ExecStart=/usr/local/vpnserver/vpnserver start (code=exited, status=0/SUCCESS)
Main PID: 1463 (code=exited, status=0/SUCCESS); : 1474 (vpnserver)
CGroup: /system.slice/softethervpn.service
├─1471 /usr/local/vpnserver/vpnserver execsvc
└─control
└─1474 /usr/local/vpnserver/vpnserver stop
Apr 18 19:11:40 raspberrypi systemd[1]: Started Softether VPN server.
Apr 18 19:11:41 raspberrypi vpnserver[1463]: The SoftEther VPN Server service has been started.
Apr 18 19:11:42 raspberrypi vpnserver[1474]: Stopping the SoftEther VPN Server service ...
Apr 18 19:11:42 raspberrypi vpnserver[1474]: SoftEther VPN Server service has been stopped.
我需要如何更正我的服务文件才能正常工作?
看来 Type
需要 forking
。以下脚本对我有用(在 SoftEther Configurationfile for Systemd 找到)。
[Unit]
Description=SoftEther VPN Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
[Install]
WantedBy=multi-user.target