Làm cách nào để tạo một dịch vụ tùy chỉnh sẽ tự khởi động khi khởi động trên Archlinux?


10

Tôi muốn chạy một lệnh đơn giản khi khởi động trên Archlinux (systemd):

nohup fatrat -n &

Tôi đã làm việc này trê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

Làm thế nào tôi có thể đạt được điều tương tự trên Arch?

Tôi đã thử:

[Unit]
Description=Fatrat NoGui Web Access Service

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

[Install]
WantedBy=multi-user.target

Nhưng nó không khởi động khi bắt đầu bằng tay (hết thời gian)

Câu trả lời:


14

Thử cái này xem sao:

[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
  • Tôi giả sử rằng "Dịch vụ truy cập web" cần mạng, vì vậy tôi đã thêm mạng.target như một yêu cầu.

  • Sử dụng nohup là không cần thiết vì chức năng này được cung cấp bởi chính systemd, tương tự cho '&'.

  • Vì chúng tôi không sử dụng nohup nữa, nên loại sẽ thay đổi thành đơn giản, tuy nhiên, giao diện web có sẵn trên bản phát hành git sẽ không hoạt động trừ khi chúng tôi thực hiện thao tác này.

  • Để biết thêm thông tin về các tệp dịch vụ systemd, hãy xem trang man "systemd.service" và https://wiki.archlinux.org/index.php/Systemd#Writing_custom_.service_files

  • Bạn có thể cân nhắc thêm Restart=alwaysvào [Service]phần để tự động khởi động lại nếu nó gặp sự cố.

  • Đặt tệp dịch vụ tại /etc/systemd/system/fatrat.servicevà kích hoạt nó để tự động khởi động thông quasystemctl enable fatrat.service


Cảm ơn bạn, nó hoạt động! Sự khác biệt duy nhất tôi phải thực hiện là thêm vào User=my_user_namedưới [Service]phần để chạy ứng dụng với tư cách là người dùng của tôi. Bằng cách này, ứng dụng có thể tải các tệp cấu hình của nó từ/home/my_user_name/.local/share/fatrat/data
Joudicek Jouda
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.