Запуск скрипта на экране с помощью cron

Запуск скрипта на экране с помощью cron

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

Теперь в мире резервного копирования я получаю файл syslog, расположенный по адресу /var/logi get

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)

и то же самое с сервером recreate

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, чтобы получить доступ к любым командам screen в Cron.

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

ОТРЕДАКТИРОВАНО:Изменил crontab в соответствии с текущим содержимым на моем сервере, проблемы остались прежними.

Pastebin из start.sh

http://pastebin.com/9QcWyqYF

решение1

Можете ли вы проверить синтаксис GNU screen для этой строки:

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команду, как указано здесьвопрос СУ

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

Обновлять

Попробуйте /bin/bashили там, где находится Shell, который вы используете.

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

Возможно, добавьте содержимое start.shдля облегчения отладки.

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

решение2

Эта команда сработала для меня, хотя, поскольку одна или несколько команд в моем скрипте требовали sudo, мне пришлось настроить ее в cron пользователя root:

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

Связанный контент