init.d 스크립트에 관해 질문이 있습니다.
현재 다음과 같은 사용자 정의 데몬을 시작하는 시작 스크립트가 있습니다.
sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &
echo $! > "$pid_file"
init 스크립트를 루트로 실행하는 한 데몬은 작동합니다.
화면을 생성하려면 데몬에 액세스해야 하지만 CentOS 6.7부터 루트가 아닌 사용자가 "script" 명령을 사용하여 화면을 실행할 수 있도록 허용하는 해결 방법을 사용해야 합니다(루트가 아닌 사용자로 "스크린" 세션을 시작하는 방법), 루트가 아닌 사용자로 데몬을 완벽하게 시작하는 다음 줄로 끝납니다.
sudo -u "$user" bash -c "script -c \"$cmd\"" >> "$stdout_log" 2>> "$stderr_log" &
문제는 프로세스의 pid를 pid 파일로 에코하고 파이프하려고 할 때 시작됩니다. 이는 데몬 자체의 pid가 아닌 "스크립트" 명령의 pid를 제공하기 때문입니다.
데몬 PID를 얻기 위한 제안이나 솔루션이 있는 사람이 있나요?
답변1
어때요?
sudo -u "$user" bash -c "script -c \"$cmd& echo $! > \"$pid_file\"\"" >> "$stdout_log" 2>> "$stderr_log" &