1

Я прошу прощения, если это было задано ранее, но я не уверен, как поставить под сомнение поисковый запрос для этого. Я чрезвычайно новичок в Linux и учусь решать проблемы.

Я пытаюсь настроить рабочие задания cron для перезапуска игрового сервера, на котором я работаю.

В настоящее время мой 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 я получаю

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 для доступа к любым экранным командам в Cron

Что я делаю неправильно и что мне нужно сделать, чтобы исправить мои проблемы.

ИЗМЕНЕНО: изменен crontab для соответствия текущему содержимому на моем сервере, проблемы остаются теми же

Pastebin из start.sh

http://pastebin.com/9QcWyqYF

3 ответа3

0

Можете ли вы проверить синтаксис экрана 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 или там, где находится используемая вами оболочка.

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

Может быть, добавить содержимое start.sh чтобы помочь отладке.

Вы можете найти оболочку с помощью команды which . Возможно, придется узнать sudo или root.

0

Эта команда работала для меня, хотя из-за того, что для одной или нескольких команд в моем скрипте требовалось sudo, я должен был настроить это под cron пользователя root:

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

Ключом к тому, чтобы заставить экран работать (а не просто сразу закрываться при вызове cron), является аргумент -d, но в некоторых случаях / m, вероятно, тоже помогает.

Ниже приведен соответствующий фрагмент с экрана --help output

msgstr "-dmS name Начать как демон: сеанс экрана в отдельном режиме."

-1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .