ExecStart=
或ExecRestart=
!
以下是我在SysVinit中的操作:
#!/bin/sh
### BEGIN INIT INFO
# Provides: myprog
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: myprog init script
# Descripton: this script manages myprog
### END INIT INFO
# exit if myprog isn't installed
[ -x "/opt/mystuff/myrpog" ] || exit 0
case "$1" in
start)
cd /opt/mystuff
./myprog -r
echo
;;
stop)
cd /opt/mystuff
./myprog -x
;;
restart)
cd /opt/mystuff
./myprog -x && ./myprog -r
;;
version)
cd /opt/mystuff
./myprog -v
;;
try)
cd /opt/mystuff
./myprog
;;
*)
echo "Usage: sudo service myprog {start|stop|version|try}" >&2
exit 3
;;
esac
:
所以上述脚本允许使用不同的参数,包括一个空参数,当使用以下命令行时将显示消息“Usage:...”:
sudo service myprog start # Start myprog with the -r argument
sudo service myprog stop # Stop myprog with the -x argument
sudo service myprog version # Display the release of myprog in the console
sudo service myprog try # Start myprog without any argument
sudo service myprog restart # Stop then start myprog with the -r argument
sudo service myprog # Display the "Usage:..." message in the console
现在,使用systemd,脚本应该像这样:
现在,使用systemd,脚本应该像这样:
[Unit]
Description=This script manages myprog
ConditionFileExecutable=/opt/mystuff/myprog
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/opt/mystuf/myprog -r
ExecStop=/opt/mystuff/myprog -x
ExecRestart=/opt/mystuff/myprog -x : /opt/mystuff/myprog -r
[Install]
After=NetworkManager.service
以下是我的问题(以及我对systemd知识的缺乏):
显然,systemd不提供像ExecCustom01=
,ExecCustom02
等这样的命令,可以让我创建“version”和“try”(如果需要的话,还有其他命令)。
因此,如果我能够使用参数同时启动“version”或“try”命令(即“真正”的重启可能通过依次启动停止和启动命令来完成),那么我可以以不同的方式使用ExecRestart
。
这些“自定义”的ExecRestart=
命令可能如下所示:
sudo systemctl restart myprog # Without argument for the "try" command
并且
sudo systemctl restart myprog -v # For the "version" command
系统服务脚本可能如下所示:
[Unit]
Description=This script manages myprog
ConditionFileExecutable=/opt/mystuff/myprog
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/opt/mystuf/myprog -r
ExecStop=/opt/mystuff/myprog -x
ExecRestart=/opt/mystuff/myprog ????? // This is where I need to use an argument
[Install]
After=NetworkManager.service
但我不知道是否可能,如果可以,使用什么语法?
任何帮助都将不胜感激,因为即使花费了大量时间在多个systemd man页面上,我也找不到如何实现的明确示例。
提前感谢您的时间和建议。
/opt/mystuff/myprog
是一个二进制可执行文件,那么就直接调用它。否则:ExecStart=/bin/sh -c '/opt/mystuf/myprog -r'
。 - Sergey Kanaevversion
或try
? - NuclearPeon[Unit]
的Description=...
选项中添加版本,这样调用systemctl status myservice
将返回This script manages myprog: v.0.90.a
或者你有的任何版本字符串。 - NuclearPeon