systemd
นี่คืองานที่เหมาะสมเป็นอย่างดีสำหรับ
การรันสคริปต์เป็นเซอร์วิส systemd
หากระบบของคุณกำลังเรียกใช้systemdคุณสามารถกำหนดค่าสคริปต์ของคุณให้ทำงานเป็นบริการ systemd ซึ่งให้การควบคุมสภาพแวดล้อมรอบการทำงานและการดำเนินการรวมถึงเงื่อนไขเบื้องต้นสำหรับการเริ่มต้นสคริปต์เช่นเครือข่ายกำลังทำงานอยู่
โฟลเดอร์ที่แนะนำสำหรับบริการของคุณคือ/etc/systemd/system/
(ตัวเลือกอื่นคือ/lib/systemd/system
แต่ควรใช้สำหรับบริการ OOTB เท่านั้น)
สร้างไฟล์เช่นด้วยsudo vim /etc/systemd/system/autossh.service
:
[Unit]
# By default 'simple' is used, see also https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
# Type=simple|forking|oneshot|dbus|notify|idle
Description=Autossh keepalive daemon
## make sure we only start the service after network is up
Wants=network-online.target
After=network.target
[Service]
## here we can set custom environment variables
Environment=AUTOSSH_GATETIME=0
Environment=AUTOSSH_PORT=0
ExecStart=/usr/local/bin/ssh-keep-alive.sh
ExecStop=pkill -9 autossh
# don't use 'nobody' if your script needs to access user files
# (if User is not set the service will run as root)
#User=nobody
# Useful during debugging; remove it once the service is working
StandardOutput=console
[Install]
WantedBy=multi-user.target
ตอนนี้คุณสามารถทดสอบบริการ:
sudo systemctl start autossh
การตรวจสอบสถานะของบริการ:
systemctl status autossh
หยุดบริการ:
sudo systemctl stop autossh
เมื่อคุณยืนยันว่าบริการใช้งานได้ตามที่คาดไว้ให้เปิดใช้งานด้วย:
sudo systemctl enable autossh
หมายเหตุ: เพื่อจุดประสงค์ด้านความปลอดภัยsystemd
จะเรียกใช้สคริปต์ในสภาพแวดล้อมที่ จำกัด คล้ายกับวิธีการcrontab
เรียกใช้สคริปต์ดังนั้นอย่าคาดเดาเกี่ยวกับตัวแปรระบบที่มีอยู่ก่อนเช่น $ PATH ใช้Environment
ปุ่มต่างๆหากสคริปต์ของคุณต้องการกำหนดตัวแปรเฉพาะ การเพิ่มset -x
ที่ด้านบนสุดของสคริปต์ทุบตีของคุณจากนั้นเรียกใช้systemctl status my_service
อาจช่วยระบุสาเหตุที่สคริปต์ของคุณล้มเหลว ตามกฎของ tumb ที่มักจะใช้เส้นทางที่แน่นอนสำหรับทุกอย่างรวมทั้งecho
หรือกำหนดอย่างชัดเจน $ Environment=MYVAR=abc
เส้นทางของคุณโดยการเพิ่ม