우리 팀은 서버 구성을 자동화하기 위해 Pallet(Clojure의 Puppet을 생각해 보세요)을 사용했지만 상당히 기본적인 문제에 직면했습니다. Pallet은 대상 VM에서 직접 임의의 스크립트를 실행할 수 있지만 스크립트 중 하나가 명령을 실행하는 경우에는 문제가 발생했습니다. 실행되지 않습니다. 적어도 우리가 디자인하는 방식에서는 그렇지 않습니다.
우리는 &와 screen을 사용하여 이 작업을 시도했는데 후자가 이상적이지만 둘 다 작동하지 않습니다. 예를 들어, Pallet이 대상 가상 머신에서 다음 스크립트를 실행하도록 하려고 합니다.
touch a
touch b &
touch c
우리가 원격으로 보는 것은 파일 a와 c가 존재한다는 것뿐입니다. 기본 스크립트를 실행하는 셸(또는 프로세스를 의미합니까?)은 "touch b" 실행을 거부합니다. 반면에 동일한 호스트에서 일반 터미널 세션을 사용하여 이 스크립트를 실행하면 제대로 작동합니다.
물론 우리는 Pallet의 관점에서 이 문제에 접근합니다. 그러나 이것이 아무 것도 초래하지 않으면 쉘이 어떤 상황에서 백그라운드 프로세스 실행을 거부하는지 누군가 말해 줄 수 있습니까? 문제를 해결하는 방법에 대한 단서를 제공할 수 있습니까?
우리는 CentOS 6.5 64비트를 사용하고 있지만 이것이 관련성이 없다고 생각합니다.
답변1
노력하다:
touch b & disown
부모 프로세스가 종료되었기 때문에 신호에 의해 자식 프로세스가 종료될 수도 있습니다. help disown
부인의 역할을 보는 데 사용됩니다 .
nohup
동일한 작업을 수행하는 별도의 프로그램이 있지만 이는 모든 쉘에서 작동합니다.
nohup touch b