यह एक बहुत अच्छी तरह से काम के लिए अनुकूल है systemd
।
एक स्क्रिप्ट को एक सिस्टमड सर्विस के रूप में चलाना
यदि आपका सिस्टम systemd चल रहा है , तो आप अपनी स्क्रिप्ट को एक systemd सेवा के रूप में चलाने के लिए कॉन्फ़िगर कर सकते हैं जो जीवनचक्र और निष्पादन परिवेश पर नियंत्रण प्रदान करती है, साथ ही स्क्रिप्ट को शुरू करने के लिए पूर्व शर्त, जैसे कि नेटवर्क का उठना और चलाना।
आपकी अपनी सेवाओं के लिए अनुशंसित फ़ोल्डर /etc/systemd/system/
(एक अन्य विकल्प यह है /lib/systemd/system
कि आम तौर पर केवल ओओटीबी सेवाओं के लिए उपयोग किया जाना चाहिए)।
फ़ाइल बनाएँ जैसे 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
यह पहचानने में मदद कर सकता है कि आपकी स्क्रिप्ट विफल क्यों हो रही है। एक नियम के रूप में, हमेशा सब कुछ सहित पूर्ण पथ का उपयोग करें echo
, या स्पष्ट रूप से जोड़कर अपने $ पथ को परिभाषित करें Environment=MYVAR=abc
।