닫히지 만 정확히는 아닙니다.
모든 터미널과 독립적으로
ssh root@remoteserver '/root/backup.sh </dev/null >/var/log/root-backup.log 2>&1 &'
일부 원격 프로세스에서 소켓이 열려있는 한 ssh 세션이 닫히지 않기 때문에 ssh 소켓에 연결된 모든 파일 디스크립터를 닫아야합니다. 스크립트 출력에 관심이없는 경우 (아마도 스크립트 자체가 로그 파일에 쓰는 작업을 처리하기 때문에)이를 리디렉션합니다 /dev/null
(그러나 스크립트를 시작할 수없는 등의 오류는 숨겨집니다).
사용 nohup
은 여기서 아무런 효과가 없습니다. nohup
프로그램의 제어 터미널이 사라지면 HUP 신호를 수신하지 않도록 프로그램을 정렬하지만 여기에는 맨 처음에 터미널이 없으므로 프로세스에서 SIGHUP을 파란색으로 보내지 않습니다. 또한 nohup
표준 출력 및 표준 오류 (표준 입력은 아님)를 파일로 리디렉션하지만 터미널에 연결되어있는 경우에만 다시 연결합니다.
터미널에서 분리
aaron@localpc$ ssh root@remoteserver
root@remoteserver# nohup /root/backup.sh </dev/null &
nohup: appending output to `nohup.out'
[1] 12345
root@remoteserver# exit
aaron@localpc$
터미널이 사라질 때 SIGHUP을nohup
받지 않도록 제어 터미널에서 스크립트를 분리하는 데 사용하십시오 . 또한 스크립트의 표준 출력 및 표준 오류를 터미널에 연결된 경우 호출 된 파일로 리디렉션합니다 . 표준 입력을 직접 관리해야합니다.nohup
nohup.out
원격 터미널 유지
원격 터미널에서 명령을 계속 실행하고 SSH 세션에 연결하지 않으려면 Screen 또는 Tmux 와 같은 터미널 멀티플렉서에서 명령을 실행하십시오 .
ssh root@remoteserver 'screen -S backup -d -m /root/backup.sh'
나중에 screen -S backup -rd
해당 머신에서 루트 로 호출하여 스크립트가 실행중인 터미널에 다시 연결할 수 있습니다 .
하나의 원격 명령 자동화
약간 더 나은 보안을 위해 직접 원격 루트 로그인을 너무 넓게 열지 마십시오. 특수 목적 키 페어를 만들고에 강제 명령을 내 /root/.ssh/authorized_keys
립니다. 공개 키 파일의 내용은 AAAA…== wibble@example.com
; command="…"
키가이 특정 명령을 실행하는 데만 사용될 수 있음을 지정하는 옵션을 포함하여 쉼표로 구분 된 옵션 목록을 추가하십시오 . 옵션과 키를 모두 한 줄로 유지하십시오.
command="/root/backup.sh </dev/null >/dev/null 2>/dev/null &",no-port-forwarding,no-agent-forwarding,no-x11-forwarding,no-pty,no-user-rc AAAA…== wibble@example.com