gpt4 book ai didi

linux - 如何在 Manjaro 上将 sysvinit 脚本转换为 systemd

转载 作者:太空宇宙 更新时间:2023-11-04 12:00:16 27 4
gpt4 key购买 nike

首先,请不要将此帖子视为系统评论或批评,而只是简单地寻求帮助。

由于我无法通过 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,包括 future 的 Debian、Mint 和 Ubuntu 发行版,就像 CentOS、Fedroa 或 Ach 和 Manjaro 一样,我尝试将我的 sysVinit 脚本调整为 systemd以下脚本有效但太有限(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 脚本中定义的以下三个等效开关(状态、测试和版本)而不响应经典而不优雅的回答:“男人是你的 friend ”?

/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

提前感谢您的宝贵时间和帮助。

最佳答案

systemd 不支持 systemctl 参数的自定义实现。

因此 systemctl status myprog 将根据 Exec* 设置的执行显示结果。

systemctl show myprog 使用 Description 因此您可以根据需要在描述中使用版本。

如果您不想将程序作为守护进程运行,那么您可以在 systemd 之外启动它。

关于linux - 如何在 Manjaro 上将 sysvinit 脚本转换为 systemd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52750011/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com