Во-первых, пожалуйста, не рассматривайте этот пост как системный обзор или критику, но только и просто как просьбу о помощи.
Поскольку я не смог найти решение этой проблемы сдокументация по systemd, у меня этот вопрос не решался почти полтора года, когда он никогда не получал никакого ответа.
Итак, вот контекст:
У меня есть программа (/ opt / myprog), который можно использовать как службу deamon во время загрузки.
При использовании предыдущих операционных систем Debian, LMDE, Mint или Ubuntu я использовал SysVinit со следующим сценарием (myprog.sh в / etc/init.d folder):
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 для 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, не отвечая классическим и неэффективным ответом: «человек твой друг»?
/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
Заранее спасибо за ваше время и помощь.