cron을 사용하여 화면에서 스크립트 시작

cron을 사용하여 화면에서 스크립트 시작

이전에 이런 질문을 받았다면 사과드립니다. 하지만 이에 대한 검색어에 대해 어떻게 질문해야 할지 잘 모르겠습니다. 저는 Linux를 처음 접했고 문제를 해결하기 위해 배우고 있습니다.

실행 중인 게임 서버를 다시 시작하기 위해 작동 중인 크론 작업을 설정하려고 합니다.

현재 내 crontab은 다음과 같습니다

#backup world as instructed by https://github.com/g1franc/SEDS-Setup
0 0 * * * /home/root/spaceengineers/start.sh backupworld
#close server
1 0 * * * /usr/bin/screen -S spaceengineers -X stuff "^C"
#close screen
2 0 * * * /usr/bin/screen -S spaceengineers -X stuff "^M"
#recreate server
3 0 * * * /home/root/spaceengineers/start.sh

이제 백업 세계에서 나는 /var/log다음 위치 에 있는 내 syslog 파일을 얻습니다.

May 24 00:00:01 SpaceEngineers CRON[1958]: (root) CMD (/home/root/spaceengineers/start.sh backupworld)
May 24 00:00:01 SpaceEngineers CRON[1957]: (CRON) info (No MTA installed, discarding output)

재생성 서버에서도 마찬가지입니다.

May 24 00:03:01 SpaceEngineers CRON[2269]: (root) CMD (/home/root/spaceengineers/start.sh /usr/bin/screen -x spaceengineers)
May 24 00:03:01 SpaceEngineers CRON[2268]: (CRON) info (No MTA installed, discarding output)

다른 명령은 완벽하게 작동합니다.

이제 누군가 내가 왜 내 코드를 내가 가지고 있는 방식으로 구성했는지 질문하기 전에, 내가 따르고 있던 튜토리얼에서 서버를 시작하라고 나와 있고 내가 ~/spaceengineers/start.sh -x spaceengineers 읽은 내용에서 화면 명령에 액세스하려면 /usr/bin/screen을 수행해야 하기 때문입니다. 크론

내가 뭘 잘못하고 있고 문제를 해결하려면 어떻게 해야 합니까?

편집됨:내 서버의 현재 내용과 일치하도록 crontab을 변경했지만 문제는 동일하게 유지됩니다.

start.sh의 Pastebin

http://pastebin.com/9QcWyqYF

답변1

이 줄에 대한 GNU 화면 구문을 확인할 수 있습니까?

3 0 * * * /home/root/spaceengineers/start.sh /usr/bin/screen -x spaceengineers

나는 다음과 같은 것을 기대했을 것입니다 :

3 0 * * * /usr/bin/screen -S spaceengineers -X stuff 'command with newline' 

그러나 이 -X방법을 사용하면 screen스크립트가 실행되지 않고 화면 명령이 실행됩니다.

screen stuff따라서 다음과 같은 명령을 사용해야 합니다 .SU 질문

screen -S sessionname -X stuff 'command'`echo -ne '\015'`

업데이트

/bin/bash사용하는 Shell이 ​​있는 곳이면 어디든 시도해 보세요 .

 3 0 * * * /bin/bash /home/root/spaceengineers/start.sh

디버깅에 도움이 되도록 내용을 추가할 수도 있습니다 start.sh.

명령 으로 쉘을 찾을 수 있습니다 which. sudo알아내려면 루트 가 되어야 하거나 루트가 되어야 할 수도 있습니다 .

답변2

이 명령은 나에게 효과적이었지만 내 스크립트의 명령 중 하나 이상에 sudo가 필요했기 때문에 루트 사용자의 cron에서 이를 설정해야 했습니다.

17 2 29 1 * /usr/bin/screen -dmS $MYSESSIONNAME /bin/bash $FULLPATHTOMYSHELLSCRIPT $SHELLSCRIPTARG1 $SHELLSCRIPTARG2 ...

화면을 작동시키는 열쇠(cron에 의해 호출될 때 즉시 닫히는 것이 아니라)가 인수이지만 -d아마도 m어떤 면에서는 도움이 될 수도 있습니다.

screen --help아래는 출력 의 관련 스니펫입니다.

-dmS name 데몬으로 시작: 분리 모드의 화면 세션."

답변3

@daily /usr/bin/screen -dms aquaticscenery /ig.py && python ig.py

관련 정보