Вопрос или проблема
У меня есть исполняемый файл 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
Следуйте этим шагам.
- Перейдите в
/etc/init.d
- Добавьте файл (например,
example
) и поместите в него скрипт, который хотите выполнить. - Запустите команду
chmod +x /etc/init.d/example
(дайте ему права на выполнение) - Добавьте
# chkconfig: 345 99 10
внутри вашего скрипта - Сохраните его
- Запустите службу с помощью
service example start
.
Это должно работать как системная служба/служба автозапуска.
Сначала у вас должен быть установлен Java в вашем Ubuntu.
Во-вторых, файл jar не является исполняемым файлом для запуска, но вам нужен Java для запуска при старте, поэтому вам нужно сделать скрипт, сделать его исполняемым или вставить ваши команды в файл /etc/rc.local
:
java -jar file.jar &
exit 0
УДАЧИ
Я использую Ubuntu 16.04 с версией Xubuntu.
Следующие шаги необходимы для запуска исполняемого jar при старте.
- Создайте shell-скрипт, который может запускать исполняемый jar
- Сделайте этот shell-скрипт исполняемым.
- Перейдите в Настройки > Сессия и автозагрузка
Ответ или решение
Запуск исполняемого jar-файла при старте системы на Linux может быть организован несколькими способами. В этом ответе изложены основные методы, которые могут быть применены в зависимости от ваших требований и предпочтений.
Метод 1: Использование /etc/rc.local
Одним из самых простых методов является добавление вашей команды в файл /etc/rc.local
. Этот файл выполняется при старте системы.
-
Откройте терминал и отредактируйте файл
/etc/rc.local
с помощью текстового редактора с правами администратора:sudo nano /etc/rc.local
-
Пропишите команду для запуска вашего jar-файла в секции перед строкой
exit 0
. Например:java -jar /путь/к/вашему/файлу/your_executable.jar & exit 0
-
Сохраните изменения и закройте редактор. Убедитесь, что файл имеет права на исполнение:
sudo chmod +x /etc/rc.local
Метод 2: Создание службы с использованием systemd
Если вы используете современные дистрибутивы Linux с поддержкой systemd
, вы можете создать службу для управления вашим приложением.
-
Создайте файл службы:
sudo nano /etc/systemd/system/myapp.service
-
Добавьте следующий код, заменив необходимые поля на ваши данные:
[Unit] Description=My Java Application After=network.target [Service] User=ваше_имя_пользователя ExecStart=/usr/bin/java -jar /полный/путь/к/вашему/jarfile.jar Restart=always [Install] WantedBy=multi-user.target
-
Перезагрузите systemd, чтобы оно узнало о новой службе:
sudo systemctl daemon-reload
-
Включите службу на запуск при загрузке:
sudo systemctl enable myapp.service
-
Запустите службу:
sudo systemctl start myapp.service
-
Проверяйте статус службы:
sudo systemctl status myapp.service
Метод 3: Использование Supervisord
Supervisord
— это инструмент, позволяющий контролировать и управлять процессами и их перезапуском. Он может быть простым решением для автоматизации запуска вашего приложения.
-
Установите
supervisord
:sudo apt install -y supervisor
-
Создайте конфигурационный файл:
sudo nano /etc/supervisor/conf.d/myapp.conf
-
Добавьте в него следующее:
[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
-
Перезагрузите
supervisor
и убедитесь, что ваше приложение работает:sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start myapp
Метод 4: Использование cron для пользовательского запуска
Если вы хотите запустить приложение только для вашего пользователя, вы можете использовать cron
.
-
Откройте файл для редактирования:
crontab -e
-
Добавьте строку с указанием на выполнение вашего jar-файла:
@reboot /usr/bin/java -jar /путь/к/вашему/файлу/your_executable.jar
В заключение
Каждый из этих методов имеет свои преимущества и недостатки. Выберите тот, который лучше всего соответствует вашим требованиям и уровню комфорта с администрированием системы. Удачи в настройке автозапуска вашего Java-приложения!