Запустите Tomcat при запуске с правами администратора

23

Мне нужно запустить один процесс, прежде чем войти в систему. Как запустить его как сервисы? как сделать сервисы в Linux?

В Ubuntu и Fedora? Сервис настроен кот

Саджад Бахмани
источник
6
Как запускать сервисы очень зависит от дистрибутива Linux. Пожалуйста, расскажите нам, чего вы пытаетесь достичь (и в каком дистрибутиве и, возможно, в Desktop Environment), потому что сейчас я думаю, что вы, вероятно, не думаете о проблеме правильно.
ксенотеррацид

Ответы:

23

Чтобы запустить службу без входа в систему или перед ее входом в систему (т. Е. «При загрузке»), вам необходимо создать сценарий запуска и добавить его в последовательность загрузки.
Сценарий службы состоит из трех частей: запуск, остановка и перезапуск.
Базовая структура сервисного скрипта:

#!/bin/bash
#
RETVAL=0;

start() {
echo “Starting <Service>”
}

stop() {
echo “Stopping <Service>”
}

restart() {
stop
start
}

case “$1″ in
start)
  start
;;
stop)
  stop
;;
restart)
  restart
;;
*)

echo $”Usage: $0 {start|stop|restart}”
exit 1
esac

exit $RETVAL  

Как только вы настроите сценарий по своему вкусу, просто поместите его в /etc/init.d/
и добавьте его в процесс запуска системной службы (в Fedora я не пользователь Ubuntu,> D):

chkconfig -add <ServiceName>  

Служба будет добавлена ​​в процесс загрузки системы, и вам не нужно будет снова запускать ее вручную.

Ура!

wormintrude
источник
2
Обратите внимание, что при запуске, остановке и перезапуске обычно достаточно простых сценариев инициализации. Возможно, вы также захотите включить действие 'status', которое легко в Debian и других дистрибутивах, которые включают status_of_proc () в свой пакет init-functions. Хорошо управляемые пакеты будут включать все функции, требуемые LSB ( refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/… ). Скрипт инициализации, распространяемый вместе с tomcat в Ubuntu, содержит все эти действия, и, вероятно, лучше просто использовать это.
Стивен Д.
19

В зависимости от системы инициализации сценарий инициализации создается по-разному. Fedora дает вам возможность выбрать и использовать systemd, и, конечно, совместимость с SysV.

Выскочка

  • создать файл определения сервиса как /etc/init/custom-tomcat.conf
  • положить внутрь:

    start on stopped rc RUNLEVEL=3
    respawn
    exec /path/to/your/tomcat --and --parameters
    

И ваш Tomcat должен запускаться при запуске системы.

Systemd

  • создать определение сервиса в /etc/systemd/system/custom-tomcat.service
  • положить внутрь:

    [Service]
    ExecStart=/path/to/your/tomcat --and --parameters
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

и включите свой сервис, используя systemctl enable custom-tomcat.service. Он будет запускаться при каждой нормальной загрузке.

Конечно, есть еще несколько параметров конфигурации для обеих систем инициализации, вы можете проверить их в их документации.

zdzichu
источник
7

Tomcat - довольно распространенный сервис, я бы порекомендовал посмотреть скрипт инициализации, предоставленный дистрибутивом. Скорее всего, он работает с вашим настроенным двоичным файлом, практически без изменений.

xenoterracide
источник
6

Если у вас есть cronдемон, один из предопределенных временных ловушек cron - это @reboot, который, естественно, запускается при запуске системы. Запустите crontab -eдля редактирования вашего crontabфайла и добавьте строку:

@reboot /your/command/here
Михаил Мрозек
источник
Это относится ко всем стартапам или просто перезагружается?
WhyNotHugo
Это относится ТОЛЬКО к fcron - не vixie-cron или любому другому cron AFAIK.
Мацей Пехотка
@Maciej Это определенно работает для vixie-cron; это то, что я использую
Майкл Мрозек
@Hugo Все стартапы
Майкл Мрозек
6

Чтобы просто запустить скрипт после запуска компьютера, но до того, как пользователь войдет в систему, вы можете просто отредактировать скрипт /etc/rc.local, который предназначен для решения именно этой задачи.

fschmitt
источник
3

Вы можете сделать более сложный сценарий, который позволяет запускать с разрешениями конкретного пользователя, следующим образом:

#!/bin/sh
NAME=myservice
DESC="My Service"
USERGROUP="myservice:myservice"

#Helper functions
start() {
        start-stop-daemon --start --quiet --background --make-pidfile \
                --pidfile /var/run/$NAME.pid --chuid $USERGROUP \
                --exec /usr/local/bin/myservice
}

stop() {
        start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
                --exec myservice --retry 30
}

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        stop
        echo "$NAME."
        ;;
  restart)
        echo -n "Restarting $DESC: "
        #set +e
        stop
        #set -e
        #sleep 1
        start

        echo "$NAME."
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart}" >&2
        exit 1
        ;;
esac

exit 0

Сценарий находится в /etc/init.d/myservice, и вы запускаете службу, выполнив:

/etc/init.d/myservice start

Прочтите страницу руководства на start-stop-daemon, чтобы понять, как это работает.

Мистер Эд
источник
1

В Ubuntu или Debian, как вы можете использовать, чтобы добавить

update-rc.d your_service defaults

удалять

update-rc.d -f your_service remove

До свидания! \ о

хорошо для реализации функций состояния и принудительной перезагрузки, чтобы быть LSB-совместимым

MaikoID
источник
как сделать так, чтобы мой демон появился в service --status-allсписке?
Necktwi