首先,请不要认为这篇文章是一篇系统性的评论或评论,而仅仅是一个请求帮助的请求。
由于我无法用systemd文档找到这个问题的解决方案,我这个问题已经有将近一年半没有得到任何答案了。
所以,这里是上下文:
我有一个程序(/opt/myprog),可以在启动时作为deamon服务进行sart。
当使用以前的Debian、LMDE、Mint或Ubuntu操作系统时,我使用SysVinit和以下脚本(myprog.sh在/etc/init.d文件夹中):

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代替一样,我已经尝试用以下有效但太有限的脚本(myprog.service)使SysVinit脚本适应systemd:
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

然而,由于StReD被广告为兼容和更灵活的SysVinit,任何人可以告诉我如何添加我在MyPr.S.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

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

最佳答案

systemd不支持自定义实现systemctl的参数。
因此systemctl status myprog将显示基于执行Exec*设置的结果。
systemctl show myprog使用Description以便您可以根据需要在描述中使用版本。
如果您不想以非后台程序的身份运行程序,那么您可以在systemd之外启动它。

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

10-08 21:51