화면에서 명령을 실행하고 분리하는 방법?


75

화면에서 명령을 실행 한 다음 분리하는 방법은 무엇입니까? 예를 들어 myscript.sh를 실행하면 자동으로 스크린 세션이 시작되고 명령이 실행 된 다음 분리됩니다.

답변:


114

이것은 쉬운 것입니다 :

screen -d -m yourcommand

4
주사위가 없습니다. screen -d -m 명령, screen -list에 소켓 없음, screen -r 세션 없음
darkfeline

1
어떻게 든 명령이 없거나 자동으로 작성된 화면 환경에서 올바르게 작동하지 않습니다. 과 screen yourcommand없이 수행하고 먼저 어떻게 진행되는지 확인하십시오. -d-m
Alan Curry

당신 말이 맞아 명령이 끝나면 화면이 종료됩니다. 내 기대와는 다릅니다. 그러나 당신의 대답은 효과가 있습니다.
darkfeline

3
zombie화면 에서 옵션 을 활성화하여이를 변경할 수 있습니다 . 에 넣으 zombie xy십시오 ~/.screenrc. 한 세션에서만 zombie xy다른 파일을 넣고 사용 -c file하지만 사용할 수는 있지만 어떤 이유로 시도해도 작동하지 않을 수도 있습니다. 아니면 그냥 사용하십시오sh -c 'yourcommand;while :;do sleep 9999; done'
Alan Curry

@AlanCurry, Nope, 화면에서 수동으로 실행할 때 명령이 완벽하게 실행되고 몇 시간이 걸리더라도 이것은 나에게 효과적이지 않습니다.
Cerin

47

화면에서 단일 명령을 실행하고 분리하려면 다음을 시도하십시오.

screen -dm sleep 10

여러 명령을 실행하려면 다음을 시도하십시오.

screen -dm bash -c "sleep 10; myscript.sh"

프로그램이 종료되면 screen (기본적으로)은 프로그램이 포함 된 창을 종료합니다.

스크립트가 끝난 후 세션이 종료되지 않게하려면 다음 exec sh과 같이 끝에 추가하십시오 .

screen -dm bash -c 'sleep 5; exec sh'

모든 세션을 나열하려면 다음을 시도하십시오.

screen -list

관련 : 시작 유닉스 화면, 실행 명령, 분리 .


2
이것은 우분투 16.04에서 나를 위해 일했습니다. 나중에 세션으로 돌아갈 수 있도록 세션 이름을 지정하는 것 외에도 다음을 추가 -S sessionname하십시오 screen -dmS MyLongRunningScript bash -c "...".
Dan Dascalescu

16

'졸린'이라는 이름으로 백그라운드에서 새 세션을 시작하려면

screen -S sleepy -dm sleep 60

'졸린'세션을 죽이려면

screen -S sleepy -X quit      

왜 그렇게 작동하지 screen -S sleepy -dm "cd myfolder;sleep 60"않습니까?
툴킷

@Toolkit 문제는 ​​명령을 따옴표로 묶어 하나의 큰 명령으로 취급한다는 것입니다. 분명히 세미콜론으로 인해 따옴표에서 인용 할 수 없습니다. 이를 해결하려면 다음과 같이 명령을 실행하십시오. screen -S sleepy -dm bash -c "cd myfolder; sleep 60"
Jason Thompson

3
screen -dmS screen_session_name bash -c 'echo "doing stuff"; exec bash'

0

컨트롤 c (sig int)를 눌러 프로그램을 종료하면 나에게 발생합니다. 모든 배쉬에서 완전히 빠져 나옵니다. 그래서 이것이 SIGINT를 잡는 것으로 나타났습니다. 마지막 bash에서 나가는 것을 방지하십시오. (종료하려면 종료를 입력해야 함)

screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here;  bash"


example:

screen -dmS "status_updates" bash -c "trap 'echo gotsigint' INT; cd /opt/status_update ; forever index.js ;  bash"

cron을 사용하여 시작시 nodejs 프로그램을 실행하는 것이 유용하다는 것을 알았습니다. 부팅시 화면을 실행합니다. cron에는 특수 이벤트 구문 @reboot event가 있습니다.

to edit cron, execute:
crontab -e

then type
@reboot screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here;  bash"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.