首先,请不要将此帖子视为系统评论或批评者,而只是作为寻求帮助的请求。
由于我无法使用systemd文档找到解决此问题的方法,因此这个问题已经解决了将近一年半,却从未收到过任何答案。
因此,这里是上下文:
我有一个程序(/ opt / myprog),可以在引导时将其作为守护进程出售。
在使用以前的Debian,LMDE,Mint或Ubuntu操作系统时,我将SysVinit与以下脚本(/etc/init.d文件夹中的myprog.sh)一起使用:
MYPROG_PATH=/opt/myprog_64
NAME="myprog"
START="-d"
STOP="-k"
TEST=""
VERSION="-v"
SCRIPTNAME=/etc/init.d/$NAME
STARTMESG="\nStarting $NAME in deamon mode.\n"
UPMESG="\$NAME is running.\n"
DOWNMESG="\$NAME is not running!\n"
TESTMESG="\nStarting NAME in client mode.\nHit Ctrl+C (or close the terminal) to stop mprog.\n"
STATUS=`pidof $NAME`
# Exit if myprog is not installed
[ -x "$MYPROG_PATH/$NAME" ] || exit 0
case "$1" in
start)
sleep 3
echo $STARTMESG
cd $MYPROG_PATH
./$NAME $START
;;
stop)
cd $MYPROG_PATH
./$NAME $STOP
;;
status)
if [ "$STATUS" > 0 ] ; then
echo $UPMESG
else
echo $DOWNMESG
fi
;;
restart)
cd $MYPROG_PATH
./$NAME $STOP
echo $STARTMESG
./$NAME $START
;;
version)
cd $MYPROG_PATH
./$NAME $VERSION
;;
test)
cd $MYPROG_PATH
echo $TESTMESG
./$NAME
;;
*)
echo "Usage: $SCRIPTNAME {start|status|restart|stop|version|test}" >&2
exit 3
;;
esac
:
现在,因为很明显,systemd将被广泛采用,以取代SysVinit,包括将来的Debian,Mint和Ubuntu发行版,例如CentOS,Fedroa或Ach和Manjaro,因此,我尝试将sysVinit脚本改编为使用以下脚本有效但太受限制(myprog.service):
Description=myprog
ConditionFileExecutable=/opt/myprog_64
After=NetworkManager.service
[Service]
Type=oneshot
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
ExecStart=/opt/myprog -d
ExecStop=/opt/myprog -k
ExecRestart=/opt/myprog-k : /opt/myprog -d
TimeoutSec=0
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
但是,由于广告宣传systemd比SysVinit兼容且更灵活,因此谁能告诉我如何添加我在myprog.sh sysVinit脚本中定义的以下三个等效开关(状态,测试和版本),而无需进行响应经典而优雅的回答:“人是你的朋友”?
/opt/myprog status to display the myprog status (i.e. running or not)
/opt/myprog test to start myprog not as a deamon
/opt/myprog version to display the release of myprog
在此先感谢您的时间和帮助。
答案 0 :(得分:0)
systemd
不支持自定义实现systemctl
的参数。
因此systemctl status myprog
将根据执行Exec*
设置显示结果。
systemctl show myprog
使用Description
,因此您可以根据需要在描述中使用版本。
如果您不想以守护程序的身份运行程序,则可以在systemd
之外启动它。