डेबियन 8 के तहत एक सेवा के रूप में एक निष्पादन चल रहा है


1

यहाँ मैं जिस डेबियन मशीन का उपयोग कर रहा हूँ उसका संस्करण विवरण है:

root@my-host-name:~# cat /etc/debian_version
8.9
root@my-host-name:~# uname -a
Linux my-host-name 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u2 (2017-06-26) x86_64 GNU/Linux
root@my-host-name:~#

अपना काम करने के लिए, मैं इस मशीन को रूट के रूप में लॉग करता हूं और इस कमांड को निष्पादित करता हूं :

/usr/java/jre1.8.0_131/bin/java -jar /usr/local/jenkins/jenkins.war

यह एप्लिकेशन एक वेब सर्वर चलाता है जिसे मैं फिर कहीं और से एक्सेस करता हूं।

मैंने एक नियमित, गैर-विशेषाधिकार प्राप्त "जेनकींस" उपयोगकर्ता बनाया है जिसके तहत इस खाते को चलाना है। जब मशीन बूट करता है, तो मैं ऊपर दिखाए गए कमांड को स्वचालित रूप से इस नए "जेनकींस" उपयोगकर्ता के रूप में चलाना चाहता हूं। इसी तरह, जब मशीन बंद हो जाती है, तो मैं चाहता हूं कि इस प्रक्रिया को इनायत से नीचे ले जाया जाए।

मुझे लगता है कि मैं जो कह रहा हूं वह यह है कि मैं चाहता हूं कि यह एप्लिकेशन सेवा के रूप में चले। (कृपया मुझे सही करें अगर मैं "सेवा" शब्द के उपयोग में ठीक नहीं हूं।)

मैं इसे कैसे पूरा कर सकता हूं?

अतिरिक्त जानकारी के बाद से पहले पोस्ट की गई जानकारी

मैं दोनों की और होता है systemd और init

root@my-host-name:~# ps -elf | grep system
4 S root       156     1  0  80   0 - 10379 -      Jul31 ?        00:00:00 /lib/systemd/systemd-udevd
4 S root       157     1  0  80   0 -  7480 -      Jul31 ?        00:00:00 /lib/systemd/systemd-journald
4 S root       420     1  0  80   0 -  7083 -      Jul31 ?        00:00:00 /lib/systemd/systemd-logind
4 S message+   422     1  0  80   0 - 10713 -      Jul31 ?        00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
4 S Debian-+   812     1  0  80   0 -  8914 -      Jul31 ?        00:00:00 /lib/systemd/systemd --user
4 S root       993     1  0  80   0 -  6809 -      Aug01 ?        00:00:00 /lib/systemd/systemd --user
0 R root      5305  4936  0  80   0 -  3182 -      02:51 pts/0    00:00:00 grep system
root@my-host-name:~# ps -elf | grep init
4 S root         1     0  0  80   0 - 44052 -      Jul31 ?        00:00:01 /sbin/init
0 R root      5307  4936  0  80   0 -  3182 -      02:51 pts/0    00:00:00 grep init

क्या वे संघर्ष करेंगे? वे कैसे परस्पर क्रिया करते हैं?

इसके अलावा, मेरा / etc / systemd / प्रणाली निर्देशिका निर्देशिका का एक चक्रव्यूह है और निर्देशिकाओं के लिए लिंक है:

root@my-host-name:/etc/systemd/system# ls -l
total 48
drwxr-xr-x 2 root root 4096 Apr 13 03:45 bluetooth.target.wants
lrwxrwxrwx 1 root root   37 Apr 13 03:45 dbus-org.bluez.service -> /lib/systemd/system/bluetooth.service
lrwxrwxrwx 1 root root   40 Apr 13 03:44 dbus-org.freedesktop.Avahi.service -> /lib/systemd/system/avahi-daemon.service
lrwxrwxrwx 1 root root   40 Apr 13 03:45 dbus-org.freedesktop.ModemManager1.service -> /lib/systemd/system/ModemManager.service
lrwxrwxrwx 1 root root   53 Apr 13 03:45 dbus-org.freedesktop.nm-dispatcher.service -> /lib/systemd/system/NetworkManager-dispatcher.service
lrwxrwxrwx 1 root root   32 Apr 13 03:45 display-manager.service -> /lib/systemd/system/gdm3.service
drwxr-xr-x 2 root root 4096 Apr 13 03:37 getty.target.wants
drwxr-xr-x 2 root root 4096 Apr 13 03:45 graphical.target.wants
drwxr-xr-x 2 root root 4096 Apr 13 03:37 halt.target.wants
drwxr-xr-x 2 root root 4096 Apr 13 03:45 hibernate.target.wants
drwxr-xr-x 2 root root 4096 Apr 13 03:45 hybrid-sleep.target.wants
drwxr-xr-x 2 root root 4096 Jul 13 09:21 multi-user.target.wants
drwxr-xr-x 2 root root 4096 Apr 13 03:37 paths.target.wants
drwxr-xr-x 2 root root 4096 Apr 13 03:37 poweroff.target.wants
drwxr-xr-x 2 root root 4096 Apr 13 03:37 reboot.target.wants
drwxr-xr-x 2 root root 4096 Apr 13 03:44 sockets.target.wants
lrwxrwxrwx 1 root root   31 Apr 13 03:45 sshd.service -> /lib/systemd/system/ssh.service
drwxr-xr-x 2 root root 4096 Apr 13 03:45 suspend.target.wants
lrwxrwxrwx 1 root root   35 Apr 13 03:37 syslog.service -> /lib/systemd/system/rsyslog.service

क्या यह राज्य मेरे डेबियन मशीन के उपयोग के स्टार्टअप तंत्र के बारे में कुछ अतिरिक्त करता है? इस निर्देशिका सामग्री को देखते हुए, क्या प्रस्तावित jenkins.service को सीधे / etc / systemd / system में रखना सही है, या क्या मुझे लिंक के इस पैटर्न का पता लगाने और इसे दोहराने का प्रयास करना चाहिए?


ऐसा लगता है कि आपका सिस्टम पारंपरिक SysV init (pid 1) चला रहा है। आपको एक init script बनानी चाहिए, sdv init script के साथ systemd भी backward संगत है, विवरण के लिए मेरा उत्तर देखें।
sebasth

जवाबों:


3

आप अपने inint सिस्टम के रूप में संभवतः systemd चला रहे हैं। अपनी सेवा को कॉन्फ़िगर करने के लिए, आपको उदाहरण के लिए आवश्यक इकाई फ़ाइल बनाने की आवश्यकता है /etc/systemd/system/jenkins.service

[Unit]
Description=Jenkins
After=network.target

[Service]
Type=simple
ExecStart=/usr/java/jre1.8.0_131/bin/java -jar /usr/local/jenkins/jenkins.war
User=jenkins

[Install]
WantedBy=multi-user.target

सेवा को बूट पर चलाने के लिए, चलाने के लिए systemctl enable jenkinssystemctl start jenkins.serviceकमांड लाइन से सेवा शुरू करता है। पूर्ण प्रलेखन के लिए, मैन पेज देखें । सिस्टमड होम पेज में आगे के अध्ययन के लिए बहुत सारी सामग्री है।

यदि आप SysV शैली init का उपयोग कर रहे हैं, तो आपको एक init स्क्रिप्ट लिखने की आवश्यकता है जो आपके डेमॉन को शुरू करती है /etc/init.d/, उदाहरण के लिए /etc/init.d/jenkins(और इसे निष्पादन योग्य चिह्नित करें)।

#!/bin/sh
### BEGIN INIT INFO
# Provides:          jenkins
# Default-Start:     2 3 4 5
# Default-Stop:      1
### END INIT INFO

EXEC="/usr/java/jre1.8.0_131/bin/java"
ARGS="-jar /usr/local/jenkins/jenkins.war"
USER="jenkins"
PIDFILE="/run/jenkins.pid"

. /lib/lsb/init-functions

case "$1" in
  start)
    start-stop-daemon --start --background --chuid $USER \
                       --make-pidfile --pidfile $PIDFILE --exec $EXEC -- $ARGS
    ;;
  stop)
    start-stop-daemon --stop --pidfile $PIDFILE --exec $EXEC
    ;;
  *)
    echo "Usage: /etc/init.d/jenkins {start|stop}"
    exit 1
    ;;
esac

exit 0

ध्यान दें कि आपको अपनी init स्क्रिप्ट में अपनी सेवा को फोर्क करना होगा, अन्यथा आपकी स्क्रिप्ट बाहर नहीं निकलती है, इस उदाहरण में स्टार्ट-स्टॉप-डेमॉन  फोर्किंग ( --background) और बदलते उपयोगकर्ता ( --chuid) करता है। आपके सिस्टम में init स्क्रिप्ट का उपयोग करके अन्य सेवाओं को कैसे शुरू किया जाता है इसका अध्ययन करने के लिए आप फाइलों का अध्ययन कर सकते हैं /etc/init.d/

बूट समय पर सेवा शुरू करने के लिए, चलाने के लिए update-rc.d jenkins enable। सेवा शुरू करने के लिए अपनी नई स्क्रिप्ट चलाएं /etc/init.d/jenkins start

एलएसबी संगत init स्क्रिप्ट भी पीछे की ओर संगत systemd हैं। /lib/lsb/init-functionsसीधे स्क्रिप्ट निष्पादित करते समय पारदर्शी तरीके से काम करने के लिए systemctl के स्रोत के लिए याद रखें ।

LSBInitScripts के लिए डेबियन विकी उपलब्ध विकल्पों के बारे में अधिक जानकारी प्रदान करता है, जैसे कि अन्य सेवा के पहले / बाद सेवा शुरू करना।


धन्यवाद! मैंने systemd बनाम init के बारे में अपने मूल पोस्ट में अतिरिक्त जानकारी जोड़ी है। क्या आपने जो कमांड दी है, systemctl daemon-reload && systemctl start jenkins.service को कमांड लाइन से चलाने का इरादा है, इसलिए मैं बिना रीबूट किए सेवा शुरू कर सकता हूं? या, क्या इसे कुछ स्टार्टअप स्क्रिप्ट में डालने का इरादा है, ताकि सर्विस रिबूट होने पर शुरू हो जाए ?
डेव

Sysv init स्क्रिप्ट उदाहरण को शामिल करने के लिए मेरे उत्तर को संपादित किया। systemctl daemon-reloadनई इकाई फ़ाइल लोड करता है। सिस्टमड में अपनी सेवा शुरू / बंद / क्वेरी करने के लिए आप systemd start/stop/status jenkins.serviceक्रमशः (रिबूट के बिना) का उपयोग कर सकते हैं ।
17
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.