-
Bug
-
Resolution: Fixed
-
Critical
-
Linux
Jenkins can not restart after plugin update if jenkins' java is started with 'java' and without full path.
It doesn't rexec itself with the following logs:
Warnung: Failed to restart Jenkins
java.io.IOException: Failed to exec 'java' Datei oder Verzeichnis nicht gefunden
at hudson.lifecycle.UnixLifecycle.restart(UnixLifecycle.java:84)
at jenkins.model.Jenkins$24.run(Jenkins.java:3337)
It seems to be caused by this recent change:
https://github.com/jenkinsci/jenkins/commit/547d4ed8d35de6be4b2788e4816019bb8cc94902#diff-1df54b5ad5f99455e21579688db5be50
From a quick look I guess this could be fixed by using execvp instead of execv as below:
- LIBC.execv(exe, new StringArray(args.toArray(new String[args.size()])));
+ LIBC.execvp(exe, new StringArray(args.toArray(new String[args.size()])));
I understand that for those calling java as /usr/bin/java the execv approach should work, but without the full path it should still work IMHO.
Thanks,
Simon
[JENKINS-22818] Jenkins on Linux can not restart after plugin update
Description |
Original:
Jenkins can not restart after plugin update if jenkins' java is started with 'java' and without full path. It doesn't rexec itself with the following logs: Warnung: Failed to restart Jenkins java.io.IOException: Failed to exec 'java' Datei oder Verzeichnis nicht gefunden at hudson.lifecycle.UnixLifecycle.restart(UnixLifecycle.java:84) at jenkins.model.Jenkins$24.run(Jenkins.java:3337) It seems to be caused by this recent change: https://github.com/jenkinsci/jenkins/commit/547d4ed8d35de6be4b2788e4816019bb8cc94902#diff-1df54b5ad5f99455e21579688db5be50 From a quick look I guess this could be fixed by using execvp instead of execv as below: - LIBC.execv(exe, new StringArray(args.toArray(new String[args.size()]))); + LIBC.execvp(exe, new StringArray(args.toArray(new String[args.size()]))); I understand that for those calling java as /usr/bin/java the execv approach should work, but without the full path it should still work IMHO. Thanks, Simon |
New:
Jenkins can not restart after plugin update if jenkins' java is started with 'java' and without full path. It doesn't rexec itself with the following logs: Warnung: Failed to restart Jenkins java.io.IOException: Failed to exec 'java' Datei oder Verzeichnis nicht gefunden at hudson.lifecycle.UnixLifecycle.restart(UnixLifecycle.java:84) at jenkins.model.Jenkins$24.run(Jenkins.java:3337) It seems to be caused by this recent change: https://github.com/jenkinsci/jenkins/commit/547d4ed8d35de6be4b2788e4816019bb8cc94902#diff-1df54b5ad5f99455e21579688db5be50 From a quick look I guess this could be fixed by using execvp instead of execv as below: - LIBC.execv(exe, new StringArray(args.toArray(new String[args.size()]))); + LIBC.execvp(exe, new StringArray(args.toArray(new String[args.size()]))); I understand that for those calling java as /usr/bin/java the execv approach should work, but without the full path it should still work IMHO. Thanks, Simon |
Description |
Original:
Jenkins can not restart after plugin update if jenkins' java is started with 'java' and without full path. It doesn't rexec itself with the following logs: Warnung: Failed to restart Jenkins java.io.IOException: Failed to exec 'java' Datei oder Verzeichnis nicht gefunden at hudson.lifecycle.UnixLifecycle.restart(UnixLifecycle.java:84) at jenkins.model.Jenkins$24.run(Jenkins.java:3337) It seems to be caused by this recent change: https://github.com/jenkinsci/jenkins/commit/547d4ed8d35de6be4b2788e4816019bb8cc94902#diff-1df54b5ad5f99455e21579688db5be50 From a quick look I guess this could be fixed by using execvp instead of execv as below: - LIBC.execv(exe, new StringArray(args.toArray(new String[args.size()]))); + LIBC.execvp(exe, new StringArray(args.toArray(new String[args.size()]))); I understand that for those calling java as /usr/bin/java the execv approach should work, but without the full path it should still work IMHO. Thanks, Simon |
New:
Jenkins can not restart after plugin update if jenkins' java is started with 'java' and without full path. It doesn't rexec itself with the following logs: Warnung: Failed to restart Jenkins java.io.IOException: Failed to exec 'java' Datei oder Verzeichnis nicht gefunden at hudson.lifecycle.UnixLifecycle.restart(UnixLifecycle.java:84) at jenkins.model.Jenkins$24.run(Jenkins.java:3337) It seems to be caused by this recent change: https://github.com/jenkinsci/jenkins/commit/547d4ed8d35de6be4b2788e4816019bb8cc94902#diff-1df54b5ad5f99455e21579688db5be50 From a quick look I guess this could be fixed by using execvp instead of execv as below: - LIBC.execv(exe, new StringArray(args.toArray(new String[args.size()]))); + LIBC.execvp(exe, new StringArray(args.toArray(new String[args.size()]))); I understand that for those calling java as /usr/bin/java the execv approach should work, but without the full path it should still work IMHO. Thanks, Simon |
Labels | New: regression |
Attachment | New: UnixLifecycle.patch [ 25778 ] |
Status | Original: Open [ 1 ] | New: In Progress [ 3 ] |
The change as described above does indeed break things which have been working fine before.
The jenkins docs show how it should be possible to start it:
https://wiki.jenkins-ci.org/display/JENKINS/Starting+and+Accessing+Jenkins
That way you can start it but it won't restart after updating plugins - it hangs instead.