如何创建一个自定义服务,它将在Archlinux上启动时自动启动?


10

我想在Archlinux(systemd)启动时运行一个简单的命令:

nohup fatrat -n &

我已经在Debian上工作了:

#! /bin/sh
# /etc/init.d/fatratWS

### BEGIN INIT INFO
# Provides: fatratWS
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: fatratWS init script.
# Description: Starts and stops fatrat Web Server services.
### END INIT INFO

#VAR
FATRAT_PID=$(ps aux | awk '/fatrat --nogui/ && !/awk/ && !/nohup/ {print $2}')

# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting script fatratWS"
if [ -z "$FATRAT_PID" ]; then
nohup fatrat --nogui &
echo "Started"
else
echo "fatratWS already started"
fi
;;
stop)
echo "Stopping script fatratWS"
if [ ! -z "$FATRAT_PID" ]; then
kill $FATRAT_PID
fi
echo "OK"
;;
status)
if [ ! -z "$FATRAT_PID" ]; then
echo "The fatratWS is running with PID = "$FATRAT_PID
else
echo "No process found for fatratWS"
fi
;;
*)
echo "Usage: /etc/init.d/fatratWS {start|stop|status}"
exit 1
;;
esac

exit 0

如何在Arch上实现相同目标?

我试过了:

[Unit]
Description=Fatrat NoGui Web Access Service

[Service]
ExecStart=/usr/bin/nohup /usr/bin/fatrat -n &
Type=forking

[Install]
WantedBy=multi-user.target

但是手动启动时无法启动(超时)

Answers:


14

尝试这个:

[Unit]
Description=Fatrat NoGui Web Access Service
Requires=network.target
After=network.target

[Service]
ExecStart=/usr/bin/fatrat -n
Type=forking

[Install]
WantedBy=multi-user.target
  • 我以为“ Web访问服务”需要网络,因此我添加了network.target作为要求。

  • 不需要使用nohup,因为此功能由systemd本身提供,与'&'相同。

  • 因为我们不再使用nohup,所以类型将变为简单,但是,除非我们进行分叉,否则git版本上可用的Web界面将无法工作。

  • 有关systemd服务文件的更多信息,请参见“ systemd.service”手册页和https://wiki.archlinux.org/index.php/Systemd#Writing_custom_.service_files

  • 您可能会考虑添加Restart=always到该[Service]部分,以使其在崩溃时自动重新启动。

  • 将服务文件放在/etc/systemd/system/fatrat.service并启用它以通过以下方式自动启动systemctl enable fatrat.service


谢谢,它有效!我唯一要做的区别是在“用户名” User=my_user_name下添加[Service]以用户身份运行该应用程序。这样,应用程序可以从/home/my_user_name/.local/share/fatrat/data
Joudicek Jouda
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.