java.io.IOException: error=0, Failed to exec spawn helper: pid: 3762312, exit value: 1
(중략)
Also: org.jenkinsci.plugins.workflow.actions.ErrorAction$ErrorId: 642da921-c992-4410-9dc4-2b47a72bb197
Caused: java.io.IOException: Cannot run program "nohup" (in directory "/var/lib/jenkins/workspace/example"): error=0, Failed to exec spawn helper: pid: 3762312, exit value: 1durable-task 플러그인을 통해 백그라운드 프로세스를 생성하며, 이 과정에서 nohup을 사용하는데, spawn helper 오류는 리눅스에서 프로세스를 생성(fork)할 수 없는 환경일 때 나타남nohup 명령어 존재 여부 확인which nohup
ls -l /usr/bin/nohup → /usr/bin/nohup 존재했고, -rwxr-xr-x 실행 권한도 정상jenkins 사용자로 직접 nohup 테스트sudo su - jenkins
nohup bash -c "echo hello" & → 백그라운드 실행도 정상, nohup.out 파일도 생성됨ulimit)cat /proc/$(pgrep -f jenkins)/limits → Max processes, Max open files 모두 충분히 높게 설정됨(문제 없음)/etc/default/jenkins 파일 수정sudo vi /etc/default/jenkins JAVA_ARGS="-Djava.awt.headless=true -Djdk.lang.Process.launchMechanism=vfork"Djava.awt.headless=true : GUI 없는 서버 환경에서 기본 설정java.awt라는 라이브러리가 있는데, 보통 마우스, 키보드, 모니터 같은 디스플레이 장치가 존재하는 환경을 전제로 동작Djdk.lang.Process.launchMechanism=vfork : Java가 프로세스를 만들 때 fork() 대신 vfork() 사용 (리눅스에서 spawn 오류 방지)fork()는 현재 프로세스(부모)의 복사본을 만드는 시스템 호출 → 복사한 후, 거기서 exec()를 호출해 새로운 프로그램을 실행fork()는 부모 프로세스를 메모리까지 복사하기 때문에 메모리 소모가 큼fork()로 sh, nohup, mvn 같은 외부 명령을 실행하는 경우에는 시스템 자원이 부족하거나 spawn helper 실패 같은 문제가 발생할 수 있음vfork()는 fork()보다 가볍고 빠른 대안vfork()를 사용할 수 있도록 선택지를 열어두고 있는데, 기본적으로는 fork()를 사용sudo systemctl restart jenkins