วิธีการสร้างบริการที่กำหนดเองที่จะเริ่มโดยอัตโนมัติในการบูตบน 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

แต่มันล้มเหลวในการเริ่มต้นเมื่อเริ่มด้วยตนเอง (หมดเวลา)

คำตอบ:


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
  • ฉันสันนิษฐานว่า "บริการการเข้าถึงเว็บ" ต้องการเครือข่ายดังนั้นฉันจึงเพิ่ม network.target ตามความต้องการ

  • การใช้ nohup นั้นไม่จำเป็นเพราะ systemd นั้นมีให้ในตัวเช่นเดียวกับ '&'

  • เนื่องจากเราไม่ใช้ nohup อีกต่อไปแล้วประเภทจะเปลี่ยนเป็นแบบเรียบง่ายอย่างไรก็ตามเว็บอินเตอร์เฟสที่มีอยู่ในการปล่อย git จะไม่ทำงานจนกว่าเราจะทำการฟอร์ก

  • สำหรับข้อมูลเพิ่มเติมเกี่ยวกับไฟล์บริการ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.