Невозможно выполнить команду nohup от Дженкинса в фоновом режиме

Невозможно выполнить команду nohup от Дженкинса в фоновом режиме

20.05.2016 11:20:43 Просмотров 23 Источник

Обновление: основываясь на приведенном ниже обсуждении, я отредактировал свой ответ для более точного описания.

Я пытаюсь выполнить команду nohup от Дженкинса. Полная команда-это

nohup java -jar /home/.../jar/server-process-0.35.jar prod >> /var/../server-process-prod.log 2>&1 &

Эта команда не работает. Я могу видеть статус как успех в Дженкинсе, но не процесс java в linux. Когда я делаю "ps-ef / grep java"

Однако когда я удаляю последнее'&', то есть я изменяю его с run in forground вместо background

Он начинает работать. Я вижу, что процесс java запущен.

Исходная команда работает нормально, если я запускаю ее на консоли linux.

Мне нужно запустить его от Дженкинса в исходном виде, то есть как процесс backgorund. Так что она независима от Дженкинса.

Есть какие-нибудь зацепки, почему это происходит?

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/37341545/unable-to-run-nohup-command-from-jenkins-as-a-background-process#comment62200289_37341545
нет, это не так .. Я проверил.
https://stackoverflow.com/questions/37341545/unable-to-run-nohup-command-from-jenkins-as-a-background-process#comment62200411_37341545
Также: что вы имеете в виду под "не работает"? Какой результат вы получаете от Bash?
https://stackoverflow.com/questions/37341545/unable-to-run-nohup-command-from-jenkins-as-a-background-process#comment62200594_37341545
Я вижу, что он начинает работать после удаления &, как вы сказали. Под неработающим я подразумеваю, что процесс java не запускается, т. е. при выполнении "ps-ef / grep java"я не вижу процесс в списке. Однако, если я удаляю & я вижу процесс java в списке, когда я бегу от Дженкинса. Когда я набираю команду на консоли linux с помощью '&' , я вижу, что процесс java работает там же. Так что это не решает мою проблему полностью, поскольку мне нужно'&', чтобы заставить его работать в backgorund, а также нужно запустить его от Дженкинса.
https://stackoverflow.com/questions/37341545/unable-to-run-nohup-command-from-jenkins-as-a-background-process#comment62202493_37341545
Я думаю точно так же, может ли это быть проблемой бегства"&"?
https://stackoverflow.com/questions/37341545/unable-to-run-nohup-command-from-jenkins-as-a-background-process#comment62202714_37341545
Чтобы ответить на ваш вопрос, я добавил шаг сборки "execute shell", в котором я сохранил вышеупомянутую команду как есть
https://stackoverflow.com/questions/37341545/unable-to-run-nohup-command-from-jenkins-as-a-background-process#comment66200363_37341545
Дженкинс убивает все порожденные процессы, как только задание заканчивается. Вы можете изменить переменную BUILD_ID env, чтобы избежать этого. Смотрите здесь и здесь .

Ответы - Невозможно выполнить команду nohup от Дженкинса в фоновом режиме / Unable to run nohup command from jenkins as a background process

Michu93

22.09.2017 12:01:10

Получил ту же проблему, добавил:

BUILD_ID=dontKillMe python /var/lib/jenkins/release.py

в Execute Shell - > команда и внутри release.py есть такое:

os.system('nohup java -jar ' + new_jars_on_server + '/' + generated_jar_by_mvn_name + '&')

и это работает

jpyams

09.02.2018 11:10:33

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

Переменная, по-видимому, зависит от типа задания. Раньше это был BUILD_ID, но для конвейерных заданий это JENKINS_NODE_COOKIE, и есть несколько других, упомянутых в этом ответе .

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

sh 'JENKINS_NODE_COOKIE=dontKillMe nohup java -jar /home/.../jar/server-process-0.35.jar prod >> /var/../server-process-prod.log 2>&1 &'

Смотрите wiki на ProcessTreeKiller и этот комментарий в Jenkins Jira для получения дополнительной информации.

PyTux

02.10.2018 03:01:06

Я перепробовал все возможные комбинации с BUILD_ID, но это не сработало. Я сделал это, хотя, поставив " nohup command > output.txt& " внутри сценария оболочки, выполняемого оболочкой execute в jenkins, он работал отлично!

Walid

04.12.2018 08:21:18

Лучшее простое решение-использовать "at now" вместо " nohup"

В свою работу Дженкинс (execute shell) поставил :

set +e #so "at now" will run even if java -jar fails
#Run java app in background
echo "java -jar $(ls | grep *.jar | head -n 1)" | at now + 1 min
Joao Vitor Marques

28.05.2019 07:16:34

В вашем сценарии оболочки Дженкинса попробуйте:

  export BUILD_ID=dontKillMe
  nohup java -jar your_java_app.jar &

Это сработало для меня!

millevlada

17.09.2019 07:24:29

что работал для меня было оборачивать nohup и Ява -фляга ... команда в sh-файл внутри команды execute shell и запуск того же SH-файла сразу после:

echo "starting java jar..."
cd [some location where jar is]
echo "nohup java -jar [jar_name].jar &" > start-jar-in-background.sh
sh start-jar-in-background.sh
echo "started java jar"

Если бы у меня был nohup java-jar ... встроенный в команду Execute shell, то он не запустил его по некоторым причинам. Я потратил на это довольно много времени, надеюсь, кому-то это поможет".;)

Tom CLERC

23.01.2020 01:16:55

Простой способ :

'nohup java-jar [jar_name].jar >log_file_you_want 2> > another_file`&

Закрыть X