Запуск исполняемого файла как службы в Debian 8

вот сведения о версии машины Debian, которую я использую:

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:~#

для выполнения моей работы, я войти в эту машину как root и выполните следующую команду:

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

Это приложение работает веб-сервер, который я затем доступ из других мест.

Я создал обычного, непривилегированного пользователя "jenkins", под которым можно запустить эту учетную запись. Когда машина загрузится, я хотел бы, чтобы команда, показанная выше, автоматически запускалась как этот новый пользователь "jenkins". Точно так же, когда машина выключена, я хотел бы, чтобы этот процесс был снят изящно.

Я полагаю, что я говорю, что я хочу, это приложение для запуска в качестве службы. (Пожалуйста, поправьте меня, если я не совсем правильно использую термин "услуга".)

как я могу это сделать?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ ДОБАВЛЕНА ПОСЛЕ ПЕРВОГО ОТВЕТА ОПУБЛИКОВАНО

Я, кажется, как 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/system представляет собой лабиринт каталогов и ссылок на каталоги:

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

указывает ли это что-нибудь дополнительное о механизме запуска, который использует моя машина Debian? Учитывая это содержимое каталога, правильно ли все-таки ставить предлагаемый Дженкинс.непосредственно в /etc / systemd/ system, или я должен попытаться выяснить этот шаблон ссылок и попытаться воспроизвести его?

19
задан Dave
06.12.2022 21:37 Количество просмотров материала 2568
Распечатать страницу

1 ответ

вероятно, вы используете systemd в качестве системы inint. Для настройки сервиса необходимо создать необходимый unit файл, например /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 daemon-reload. systemctl start jenkins.service запустить службу из командной строки. Полную документацию см. В разделе man страницы. Systemd Домашняя страница также имеет много материала для дальнейшего изучения.

в случае, если вы используете SysV style 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 "" 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

обратите внимание, что необходимо разветвить службу в сценарии инициализации, в противном случае сценарий не выходит, в данном примере Start-stop-daemon делает разветвление (--background) и изменение пользователей (--chuid). Чтобы изучить, как другие сервисы запускаются в вашей системе с помощью init скриптов, Вы можете изучить файлы в /etc/init.d/.

для запуска службы в время загрузки, выполнить update-rc.d jenkins enable. Для запуска сервиса запустите новый скрипт /etc/init.d/jenkins start.

LSB совместимые сценарии инициализации также systemd обратно совместимы. Не забудьте источник /lib/lsb/init-functions для systemctl для прозрачной работы при выполнении скрипта.

Debian wiki для LSBInitScripts предоставляет более подробную информацию о доступных параметрах, таких как запуск службы после/перед другой службой.

1
отвечен sebasth 2022-12-08 05:25

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх