Запуск исполняемого jar-файла при старте системы

Вопрос или проблема

У меня есть исполняемый файл jar на Java, который я пытаюсь запустить в терминале.

Мне нужно, чтобы проект запускался автоматически, чтобы файл jar запускался каждый раз, когда я включаю компьютер, как системная служба.

Вы можете сделать это, добавив команду в конец /etc/rc.local, вам потребуется доступ sudo для редактирования этого файла.

Таким образом, эта команда должна работать для вас, замените your_executable.jar на ваш фактический файл jar.

sudo echo 'java -jar your_executable.jar' >> /etc/rc.local

Попробуйте следующее:

#!/bin/sh
#
# chkconfig: 345 50 83
#
### BEGIN INIT INFO
# Краткое описание: Запустить Beamer при старте системы
# Описание: Запустить blupay beamer при старте системы
### END INIT INFO

#Источники библиотеки функций
. /etc/rc.d/init.d/functions

#Конфигурационный файл для beamer
if [ -f /etc/sysconfig/yourapp ]; then
    source /etc/sysconfig/yourapp
fi

#Запустить httpd в C локали по умолчанию.
YOURAPP_LANG=${YOURAPP_LANG-"java"}

# Путь к файлу .jar.
yourapp=path/path_a/path_b
prog=app
pidfile=${PIDFILE-/var/run/yourapp/app.pid}
lockfile=${LOCKFILE-/var/lock/subsys/app}
RETVAL=0

start() { 
    echo -n "запуск $prog"
    LANG=${YOURAPP_LANG}
    RETVAL=$?
    java -jar ${yourapp}/yourjarfilename.jar
    echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
stop() {
    echo -n $"Остановка $prog: "
        killproc -p ${pidfile} -d  $app
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Перезагрузка $prog: "
    if ! LANG=$BEAMER_LANG $app$OPTIONS -t >&/dev/null; then
        RETVAL=6
        echo $"не перезагружается из-за ошибки синтаксиса конфигурации"
        failure $"не перезагружается $beamer из-за ошибки синтаксиса конфигурации"
    else
        # Принудительное поведение LSB от killproc
        LSB=1 killproc -p ${pidfile} $app -HUP
        RETVAL=$?
        if [ $RETVAL -eq 7 ]; then
            failure $"остановка приложения"
        fi
    fi
    echo
}

# Посмотрите, как мы были вызваны.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status -p ${pidfile} $app
        RETVAL=$?
        ;;
  restart)
        stop
        start
        ;;
  force-reload|reload)
        reload
        ;;
  *)
        echo $"Использование: $prog {start|stop|restart|force-reload|reload|status}"
        RETVAL=2
esac

exit $RETVAL  

Перейдите в /etc/sysconfig/, создайте файл yourapp: добавьте следующие содержимое:

#файл конфигурации для blupay beamer

#
#
# Чтобы передать дополнительные параметры (например, -D определения) в
# бинарный httpd при запуске, установите OPTIONS здесь.
# Добавьте параметры, только если хотите
#OPTIONS=
#

#
# По умолчанию процесс bemaer запускается в java локали; чтобы 
# изменить локаль, в которой работает сервер, можно установить переменную BEAMER_LANG.
#
#YOURAPP_LANG=java
#

#
#По умолчанию ваше приложение создаст app.pid 
#
#PID_FILE=/var/run/app/appp.pid
#

Теперь вы сможете запустить его следующим образом:

sudo service app start  

Не забудьте заменить app и YOURAPP на правильные имена

Более простое решение, чем запускать как системная служба, это использовать supervisord. Пожалуйста, смотрите полные инструкции на http://supervisord.org/

Краткая версия

sudo apt install -y supervisor

> cat /etc/supervisor/conf.d/tick.conf 
; файл конфигурации tick
[program:tick]
command=/tmp/ticker.bash
environment=CTX="bogus-42"


> cat /tmp/ticker.bash
#!/bin/bash
while true ; do
  echo "tick   CTX='${CTX}'   SUPERVISOR_PROCESS_NAME=${SUPERVISOR_PROCESS_NAME}   $(date)"
  sleep 1
done


# убедитесь, что supervisor работает
> sudo systemctl restart  supervisor

# убедитесь, что задача tick работает
> sudo supervisorctl start all
> sudo supervisorctl status
tick      RUNNING   pid 17946, uptime 0:06:11


> d /var/log/supervisor/*                                        
-rw-r--r-- 1 root root  1607 Nov 22 15:17 /var/log/supervisor/supervisord.log
-rw------- 1 root root     0 Nov 22 15:16 /var/log/supervisor/tick-stderr---supervisor-S4zZDy.log
-rw------- 1 root root 16548 Nov 22 15:19 /var/log/supervisor/tick-stdout---supervisor-5z8GTx.log


> sudo tail -3 /var/log/supervisor/tick-stdout---supervisor-5z8GTx.log
tick   CTX='bogus-42'   SUPERVISOR_PROCESS_NAME=tick   Tue Nov 22 15:20:12 PST 2016
tick   CTX='bogus-42'   SUPERVISOR_PROCESS_NAME=tick   Tue Nov 22 15:20:13 PST 2016
tick   CTX='bogus-42'   SUPERVISOR_PROCESS_NAME=tick   Tue Nov 22 15:20:14 PST 2016

Следуйте этим шагам.

  1. Перейдите в /etc/init.d
  2. Добавьте файл (например, example) и поместите в него скрипт, который хотите выполнить.
  3. Запустите команду chmod +x /etc/init.d/example (дайте ему права на выполнение)
  4. Добавьте # chkconfig: 345 99 10 внутри вашего скрипта
  5. Сохраните его
  6. Запустите службу с помощью service example start.

Это должно работать как системная служба/служба автозапуска.

Сначала у вас должен быть установлен Java в вашем Ubuntu.

Во-вторых, файл jar не является исполняемым файлом для запуска, но вам нужен Java для запуска при старте, поэтому вам нужно сделать скрипт, сделать его исполняемым или вставить ваши команды в файл /etc/rc.local:

java -jar file.jar &
exit 0 

УДАЧИ

Я использую Ubuntu 16.04 с версией Xubuntu.
Следующие шаги необходимы для запуска исполняемого jar при старте.

  1. Создайте shell-скрипт, который может запускать исполняемый jar
  2. Сделайте этот shell-скрипт исполняемым.
  3. Перейдите в Настройки > Сессия и автозагрузка

Диалог Сессия и автозагрузка

Добавить приложение для автозапуска

Ответ или решение

Запуск исполняемого jar-файла при старте системы на Linux может быть организован несколькими способами. В этом ответе изложены основные методы, которые могут быть применены в зависимости от ваших требований и предпочтений.

Метод 1: Использование /etc/rc.local

Одним из самых простых методов является добавление вашей команды в файл /etc/rc.local. Этот файл выполняется при старте системы.

  1. Откройте терминал и отредактируйте файл /etc/rc.local с помощью текстового редактора с правами администратора:

    sudo nano /etc/rc.local
  2. Пропишите команду для запуска вашего jar-файла в секции перед строкой exit 0. Например:

    java -jar /путь/к/вашему/файлу/your_executable.jar &
    exit 0
  3. Сохраните изменения и закройте редактор. Убедитесь, что файл имеет права на исполнение:

    sudo chmod +x /etc/rc.local

Метод 2: Создание службы с использованием systemd

Если вы используете современные дистрибутивы Linux с поддержкой systemd, вы можете создать службу для управления вашим приложением.

  1. Создайте файл службы:

    sudo nano /etc/systemd/system/myapp.service
  2. Добавьте следующий код, заменив необходимые поля на ваши данные:

    [Unit]
    Description=My Java Application
    After=network.target
    
    [Service]
    User=ваше_имя_пользователя
    ExecStart=/usr/bin/java -jar /полный/путь/к/вашему/jarfile.jar
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
  3. Перезагрузите systemd, чтобы оно узнало о новой службе:

    sudo systemctl daemon-reload
  4. Включите службу на запуск при загрузке:

    sudo systemctl enable myapp.service
  5. Запустите службу:

    sudo systemctl start myapp.service
  6. Проверяйте статус службы:

    sudo systemctl status myapp.service

Метод 3: Использование Supervisord

Supervisord — это инструмент, позволяющий контролировать и управлять процессами и их перезапуском. Он может быть простым решением для автоматизации запуска вашего приложения.

  1. Установите supervisord:

    sudo apt install -y supervisor
  2. Создайте конфигурационный файл:

    sudo nano /etc/supervisor/conf.d/myapp.conf
  3. Добавьте в него следующее:

    [program:myapp]
    command=java -jar /путь/к/вашему/файлу/your_executable.jar
    autostart=true
    autorestart=true
    stderr_logfile=/var/log/myapp.err.log
    stdout_logfile=/var/log/myapp.out.log
  4. Перезагрузите supervisor и убедитесь, что ваше приложение работает:

    sudo supervisorctl reread
    sudo supervisorctl update
    sudo supervisorctl start myapp

Метод 4: Использование cron для пользовательского запуска

Если вы хотите запустить приложение только для вашего пользователя, вы можете использовать cron.

  1. Откройте файл для редактирования:

    crontab -e
  2. Добавьте строку с указанием на выполнение вашего jar-файла:

    @reboot /usr/bin/java -jar /путь/к/вашему/файлу/your_executable.jar

В заключение

Каждый из этих методов имеет свои преимущества и недостатки. Выберите тот, который лучше всего соответствует вашим требованиям и уровню комфорта с администрированием системы. Удачи в настройке автозапуска вашего Java-приложения!

Оцените материал
Добавить комментарий

Капча загружается...