Мне нужно иметь сервис (который запускает Java-фоновый процесс), который при перезапуске перезапускается. Основываясь на информации, найденной в интернете, я сделал этот «фальшивый сервис», который работает
[Unit]
Description=Fake Service
After=network.target
[Service]
Type=simple
#RemainAfterExit=yes
#Type=forking
PIDFile=/opt/fake-service/myservice.pid
User=root
ExecStart=/bin/bash /opt/fake-service/test.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
, а скрипт test.sh -
java -cp /opt/fake-service/mytest.jar it.Main 5000 > /opt/fake-service/output.log
, эта программа регистрирует каждые 5 секунд, и если я убиваю, он автоматически перезапускается (также, если эта строка не работает использовать, я сделал, но в статусе systemctl этот pid не используется)
Теперь мне нужно переключиться на реальную Java (более сложное приложение), для запуска которого требуется больший скрипт, потому что мне нужно установить много свойств и больше classpath (подключитесь к внешнему дБ и проверьте новые данные для использования).
Поэтому я изменил test.sh в
DUSR=myuser
echo "Starting Service...in $PWD"
# su -l ${DUSR} -c '/opt/fake-service/bin/start2.sh > /opt/fake-service/bin/output.log 2> /opt/fake-service/bin/error.log &'
/opt/fake-service/bin/start2.sh > /opt/fake-service/bin/output.log 2> /opt/fake-service/bin/error.log &
и start2.sh - это
...setting all I need ......
$JAVA_HOME/bin/java "$MEMORY_JAVA_OPS" \
...
...
"file:$TEST_SERVICE_DIR/configuration/config.xml" &
sleep 2
umask 022; pgrep -f config.xml > /opt/fake-service/myservice.pid
Я также включил службу и при запуске ВМ запускаю службу. Но если я завершу процесс, служба НЕ перезапустится автоматически, а также systemctl start servicename не работает больше и systemctl status servicename он мне дает старая информация, как будто последний запуск никогда не был выполнен.
Я также пытался изменить службу с
Type=simple
на
RemainAfterExit=yes
Type=forking
Может кто-нибудь помочь мне? Почему часто в различных скриптах теста systemctl не возвращает ошибку, поэтому я не могу понять проблему? Я также протестировал некоторые команды, такие как
journalctl -u myservice.service -b
и другие подобные, но никогда не возвращал ошибок, которые могут помочь мне понять, в чем заключается цепочка сценариев!
PS: я использую Centos7