이전에 이런 질문을 받았다면 사과드립니다. 하지만 이에 대한 검색어에 대해 어떻게 질문해야 할지 잘 모르겠습니다. 저는 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
답변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