Я создал сценарий, который работает как ожидалось в оболочке, но задание cron, похоже, не запускает его. когда я проверяю свою почту cron, я вижу, что он печатает «hltv не запущен», но не создает сеанс экрана.
#!/bin/bash
if [[ $(netstat -a | grep '27027') == *27027* ]]; then
echo "tour 2 hltv is running"
else
echo "hltv is not running"
/usr/bin/screen -A -m -d -S tour2 ./start_hltv +connect xxx.xxx.xx.xx:27015 -port 27027 +exec hltv.cfg
fi
Я заменил свой ip на xx.xxx.xx.xxx по соображениям конфиденциальности.
Дополнительные сведения ... У меня есть centos vps, который я использую для hltv (связанного с игрой Half Life), который работает на порту 27027. Время от времени он вылетает, поэтому я пытался создать сценарий, который проверял бы, что-то происходит с этим портом, и если нет, это означает, что процесс разбился и его нужно запустить.
Я создал сценарий, назвал его "автозапуск" и запустил
chmod +x autorestart
Это результат, который я получил из своего письма о вакансии cron, но screen -ls не показывает tour2 как действительный экран.
Идентификатор сообщения: <20140330021701.71D591A5B@hltvvps.localdomain> Дата: Сб, 29 марта 2014 г. 22:17:01 -0400 (EDT)
hltv не работает
Спасибо
Редактировать. Получил, что это работает.
#!/bin/bash
if [[ $(netstat -a | grep '27027') == *27027* ]]; then
echo "tour 2 hltv is running"
else
echo "hltv is not running"
cd /usr/hlds/tour2
chmod +x ./run_hltv (run_hltv has screen command)
sh run_hltv
Понятно, что ваш сценарий автозапуска запускается cron (потому что вы получаете электронное письмо с сообщением «hltv не запущен»). Если бы сам экран не работал, я бы ожидал увидеть сообщения об ошибках в том же сообщении. Это говорит о том, что экран запускается успешно, но вскоре умирает. Вы пробовали добавить параметр -L на экран, чтобы он регистрировал вывод?
/usr/bin/screen -L -A -m -d -S tour2 ./start_hltv +connect xxx.xxx.xx.xx:27015 -port 27027 +exec hltv.cfg
Вывод должен появиться в $ HOME / screenlog.0. Вероятно, вы не хотите, чтобы это было постоянно, но это может помочь показать вам, что именно не получается.
... поскольку Oldskool говорит, что вы должны указать путь к cron, что делать со сценарием, попробуйте сделать исполняемый файл сценария chmod 755 scriptfile. или в спецификации cron путь bash. Например, у меня есть сценарий будильника Raspberry Pi, который запускается каждый день в определенное время. сценарий находится на Python, так что то, что iv сделал в cron, это
25 7 * * * python /home/scriptfolder/clock.py
каждый день в 7:25 утра этот скрипт будет выполняться ... потому что вы указали путь в скрипте для того, какой интерпретатор использовать, вам просто нужно поместить в cron вот так
* * * * * bash /path/to/script/file
или
* * * * * /path/to/script/file.sh
но здесь вы должны сделать скрипт исполняемым
Сам ваш скрипт выглядит нормально, за исключением того, что вы используете относительный путь для стартового скрипта (./start_hltv
). По умолчанию на машинах CentOS crontab запускается из корневого каталога файловой системы. /
, что выполняется этой строкой:
HOME=/
Чтобы все ваши cronjobs бесперебойно работали сейчас и в будущем, я бы посоветовал не изменять эту строку. Вместо этого просто используйте полный путь в своем скрипте. Так что замените ./start_hltv
с полным путем: /usr/hlds/tour2/start_hltv
.
Вам также может потребоваться заменить +exec hltv.cfg
с полным путем, поэтому он становится +exec /usr/hlds/tour2/hltv.cfg
.
На мой взгляд, относительные пути и / или прямые имена подходят для скриптов, запускаемых cron или любыми другими способами. Вам просто нужно убедиться, что текущий каталог и окружение верны. Для прямых имен команд вам просто нужно установить PATH
соответственно, а для относительных имен вам нужно изменить директорию. Лучше всего выполнить оба этих шага в начале вашего скрипта.
Тот факт, что вывод вашего скрипта включен в почту, означает, что он уже запущен cron. (Ответ IvanAK здесь кажется бесполезным. Ответ Павла может помочь вам с экраном.)
Хотя Oldskool решит эту проблему, переключив все пути на абсолютные пути, я просто исправлю среду и текущий каталог в начале.
#!/bin/bash
cd /path/where/you/run/it/successfully
...
Конфигурация cron и сведения о текущем каталоге, текущем пользователе, среде и т. Д. - это все, что вы должны указать в вопросе. Но если бы вы это сделали, вы, вероятно, сами нашли бы ответ.