У меня есть файл 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 минут, как и предполагалось.
[d4 ] Я также добавил* * * * * /bin/echo "Testing123"
, чтобы проверить, работает ли cron вообще, и ничего не появилось в консоли.
Как я могу заставить cron запускать скрипт каждые 5 минут ? Я проводил исследования в Интернете и пробовал решения, но не мог заставить его работать на меня. Я сделал service cron start, и он сказал, что он уже работает. Я также перезапустил службу. Разрешения установлены правильно, я дал всем пользователям права на чтение, запись и выполнение, чтобы убедиться (я знаю, что права правильные).
Попробуйте запустить echo PATH=$PATH > path.tmp. Затем добавьте содержимое path.tmp в начало вашего скрипта. Это обеспечит тот же путь, что и интерактивный сценарий.
Возможно, вы захотите добавить путь к началу скрипта. Что-то вроде #!/bin/bash должно работать.
Также убедитесь, что ваш скрипт является исполняемым. Запустите команду chmod +x m.sh. Затем проверьте, что ваш скрипт может быть запущен как ./m.sh.
Вывод сценария должен быть отправлен по электронной почте на идентификатор пользователя запущенного crontab. В случае с корнем убедитесь, что у вас есть псевдоним идентификатора пользователя, который вы отслеживаете для почты в /etc/aliases. Как правило, вы не хотите выводить из cron-скриптов, если что-то не сработает. Перенаправить вывод в журнал, если вам это нужно.