내 .sh 파일에 다음과 같은 새 줄이 있습니다.
su --session-command='$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile' $serviceUser || return 1
큰따옴표를 사용하면 어느 정도 효과가 있었지만 pidFile의 pid가 잘못되어 1씩 벗어났습니다. 연구의 해결책은 작은 따옴표를 사용하는 것이었고 작은 따옴표가 작동하도록 할 수 없습니다.
이제 2개의 오류가 발생합니다.
bash: $pidFile: 모호한 리디렉션
bash: $serviceLogFile: 모호한 리디렉션
변수를 사용하거나 작은따옴표로 묶인 변수에 출력할 수 없는 것 같나요?
이 줄은 거의 작동하지만 pid가 1씩 벗어났습니다.
아래 코드는 부팅 시 시작되지만 pid가 잘못되었습니다.
su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
이 버그가 많은 오래된 2줄 코드를 대체해야 했습니다.
cmd="nohup $javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile"
# Don't forget to add -H so the HOME environment variable will be set correctly.
sudo -u $serviceUser -H $SHELL -c "$cmd" || return 1
이전 코드는 제대로 작동했지만 부팅 시 시작할 수 없었습니다.
답변1
&
뒤에 추가를 넣었기 때문에 프로세스 ID가 1씩 벗어났습니다 $javaCommandLine
. 즉, 을 호출하기 전에 백그라운드에 두 개의 프로세스를 배치하여 가 아닌 의 echo $!
PID를 얻습니다 . 이전 2줄 코드에서 볼 수 있듯이 이 두 부분을 하나로 묶어야 합니다.>>$serviceLogFile 2>&1
$javaCommandLine
su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
다음으로 변경해야 할 수도 있습니다.
su --session-command="$javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1