별도의 화면에서 bash 스크립트를 실행하고 싶습니다. 스크립트는 프로그램을 여러 번 호출하며 매번 오랜 시간 동안 기다립니다. 처음 생각한 것은 단순히 화면을 연 다음 스크립트를 호출하는 것이었지만, ctrl-a d
스크립트가 실행되는 동안에는 분리(통과)할 수 없는 것 같습니다. 그래서 좀 조사를 하다가 이런 걸 발견했어요지침Shebang을 다음으로 바꾸십시오.
#!/usr/bin/screen -d -m -S screenName /bin/bash
하지만 이것도 작동하지 않습니다(옵션이 인식되지 않음). 어떤 제안이 있으십니까?
추신: 이제 이것이 내 목적에 맞을 수도 있다는 생각이 들지만 screen -dmS name ./script.sh
, 이것을 스크립트에 통합하는 방법은 여전히 궁금합니다. 감사해요.
답변1
이것셰르본표시되는 줄은 일부 UNIX 변형에서는 작동하지만 Linux에서는 작동하지 않을 수 있습니다. Linux shebang은 제한되어 있습니다. 선택은 하나뿐입니다. 전체 문자열은 별도의 단어가 아닌 -d -m -S screenName /bin/bash
단일 옵션으로 전달됩니다 .screen
여러 파일이나 참조를 처리하는 대신 screen 내에서 스크립트를 실행하려는 경우 해당 스크립트를 screen 내에서 아직 실행되지 않은 경우 screen 을 호출하는 쉘 스크립트로 만들 수 있습니다.
#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff
답변2
화면 매뉴얼 페이지에 따르면:
screen -d -m
분리 모드의 실행 화면입니다. 그러면 새 세션이 생성되지만 연결되지는 않습니다. 이는 시스템 시작 스크립트에 유용합니다.-S sessionname
새 세션의 이름을 sessionname으로 설정합니다.
따라서 제공한 명령을 실행하면 다음과 같습니다.screen -dmS name ./script.sh
Screen은 name이라는 창을 시작하고 자동으로 script.sh를 실행합니다. 다시 돌아가서 상태를 확인하려면 다음을 입력하면 됩니다.screen -r test
이제 Ubuntu 14.04를 사용하면 명령이 약간 다릅니다. 노력하다:
screen -d -m -S test
이제 스크립트를 실행하려면 구성 파일로 이동해야 합니다.
sudo vim /etc/screenrc
거기에 도달하면 맨 아래로 스크롤하면 다음을 볼 수 있습니다.
# Example of automatically running some programs in windows on screen startup.
#
# The following will open top in the first window, an ssh session to monkey
# in the next window, and then open mutt and tail in windows 8 and 9
# respectively.
#
# screen top
# screen -t monkey ssh monkey
# screen -t mail 8 mutt
# screen -t daemon 9 tail -f /var/log/daemon.log
이 섹션에서는 실행하려는 스크립트의 이름을 추가해야 합니다. 이를 통해 화면에서 원하는 모든 작업을 수행할 수 있습니다.
답변3
조금 오래된 내용이지만 제가 찾을 수 있는 몇 안 되는 스레드 중 하나입니다. 우분투 14에서 분리 모드로 실행하는 유일한 방법은 다음과 같습니다.
screen -d -m -t nameofwindow sh nameoflaunch.sh
릴리스는 현재 java 명령과 서버 버전을 포함하는 위의 두 번째 부분입니다. 나는 바닐라를 거래한다.