У меня есть sh-файл под названием m.sh
с содержимым:
echo "Cleaning memory"
sync; echo 3 > /proc/sys/vm/drop_caches
echo ""
free -m
echo ""
ps cax | grep java > /dev/null
if [ $? -eq 0 ]; then
echo "== Server is already running =="
else
sh a.sh
echo "========== STARTING THE SERVER =========="
fi
Когда я запускаю его с sh m.sh
, он отлично работает. Но мне нужно, чтобы он запускался каждые 5 минут, поэтому я использую задания cron. Он должен работать как root / sudo, поэтому я сделал sudo -s
, затем crontab -e
и записал это в файл:
0,4,9,14,19,24,29,34,39,44,49,54 * * * * /bin/sh /home/<username>/m.sh
Я провел некоторые исследования и узнал, что у cron разные пути. чем пользователь, поэтому я использовал эти абсолютные пути, чтобы убедиться.
Задание cron не запускало скрипт каждые 5 минут, как предполагалось.
Я также добавил
* * * * * /bin/echo "Testing123"
, чтобы проверить, работает ли cron вообще, и ничего не появилось в консоли.
Как заставить cron запускать скрипт каждые 5 минут? Я проводил исследования в Интернете и пробовал решения, но не смог заставить меня работать. Я сделал service cron start
, и он сказал, что уже работает. Я также перезапустил службу. Разрешения установлены правильно, я дал всем пользователям права на чтение, запись и выполнение, просто чтобы убедиться (я знаю, что разрешения правильные).
Что касается вашего тестового скрипта - задания crontab не подключены к физической консоли, поэтому не ожидайте вывода. Попробуйте
* * * * * /bin/touch /tmp/foo
... и посмотрите, обновляется ли файл /tmp/foo
. Это должно.
Чтобы запускать скрипт каждые пять минут, есть ярлык:
*/5 * * * * /bin/sh /whatever/script/blah.sh
Кроме того, я бы отредактировал ваш скрипт так, чтобы он регистрировал его активность. Например,
LOGFILE=/var/log/leoncleaner.log
# ...
echo `date '+%Y-%m-%d %H:%M:%S'` Starting server >> $LOGFILE
Кроме того, вы можете перенаправить вывод из файла crontab напрямую:
*/5 * * * * /bin/sh /whatever/script/blah.sh >> /var/log/leoncleaner.log
Попробуйте запустить echo PATH=$PATH > path.tmp
. Затем добавьте содержимое path.tmp в начало вашего скрипта. Это обеспечит тот же путь, который у вас есть в интерактивном режиме к сценарию.
Возможно, вы захотите добавить путь взрыва в начало вашего скрипта. Что-то вроде #!/bin/bash
должно работать.
Также убедитесь, что ваш скрипт исполняемый. Запустите команду chmod +x m.sh
. Тогда протестировать ваш скрипт можно будет как ./m.sh
.
Выходные данные скрипта должны быть отправлены по почте идентификатору пользователя crontab, который он запускает. В случае root убедитесь, что у вас есть псевдоним для идентификатора пользователя, который вы отслеживаете для почты в /etc/aliases
. Как правило, вы не хотите выводить из скриптов cron, если что-то не получается. Перенаправить вывод в журнал, если вам это нужно.