Не удается заставить cron работать на Amazon EC2?
Я потратил два дня, пытаясь понять, почему я не могу заставить cron работать на моем экземпляре Ubuntu EC2. Я прочитал документацию. Может ли кто-нибудь помочь? Все, что я хочу, это получить рабочую крону.
Я использую простую команду wget для проверки cron. Я проверил, что это работает вручную из командной строки:
/usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/
Мой файл crontab выглядит следующим образом:
02 * * * * /usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/
У меня есть отдельные пробелы между командами, и у меня есть пустая строка под командой. Я также попытался выполнить эту команду с системного уровня sudo crontab -e
. Это все еще не работает.
Выполняется демон cron:
ps aux | grep crond
ubuntu 2526 0.0 0.1 8096 928 pts/4 S+ 10:37 0:00 grep crond
Кажется, что cronjob работает:
$ crontab -l
02 * * * * /usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/
Есть ли у кого-нибудь советы или возможные решения?
Спасибо за ваше время.
Ответы
Ответ 1
Cron можно запускать на сервере linux на базе Amazon, как на любом другом Linux-сервере.
- Войдите в консоль с SSH.
- Запустите
crontab -e
в командной строке.
- Теперь вы находитесь внутри редактора vi crontab текущего пользователя (который по умолчанию является пользователем консоли с правами root)
- Чтобы проверить cron, добавьте следующую строку:
* * * * * /usr/bin/uptime > /tmp/uptime
- Теперь сохраните файл и выйдите из vi (нажмите Esc и введите: wq).
- Через минуту или две убедитесь, что файл времени работы был создан в /tmp (
cat /tmp/uptime
).
- Сравните его с текущим временем работы системы, введя команду
uptime
в командной строке.
Сценарий выше успешно работал на сервере с установленным Amazon Linux O/S, но он также должен работать и с другими ящиками Linux. Это изменяет crontab текущего пользователя, не касаясь системы crontabs и не требует пользователя внутри записи crontab, так как вы работаете под своим собственным пользователем. Легче и безопаснее!
Ответ 2
Ваш демон cron не работает. Когда вы работаете с ps aux | grep crond
ps aux | grep crond
результат показывает, что работает только команда grep. Помните об этом всякий раз, когда вы запускаете ps aux | grep blah
ps aux | grep blah
.
Проверьте состояние службы cron, выполнив эту команду.
Пытаться:
sudo service crond status
Дополнительная информация здесь: http://www.cyberciti.biz/faq/howto-linux-unix-start-restart-cron/.
Ответ 3
Не забудьте указать пользователя для его запуска. Попробуйте создать новый файл внутри вашей папки /etc/cron.d
, названной так, как вы хотите сделать, например getnytimes
, и иметь содержимое этого файла:
02 * * * * root/usr/bin/wget -O/home/ubuntu/backups/testfile http://www.nytimes.com/
Ответ 4
В моем случае работа cron работала, но script не удалось выполнить сбой. Причина отказа была связана с тем, что я использовал относительный путь вместо абсолютного пути в моей строке include внутри script.
Ответ 5
работает
/usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/
дает мне ошибку
/home/ubuntu/backups/testfile: No such file or directory
это ваша проблема?
Я думаю, cron не пишет эту ошибку нигде, вы можете перенаправить stderr в stdout и увидеть ошибку, подобную этой:
02 * * * * /usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/ > /home/ubuntu/error.log 2&>1
Ответ 6
Одна из возможных причин не запуска cronjob: убедитесь, что время сервера и время cronjob совпадают. Я потратил много времени из-за этого.
Ответ 7
На машинах AWS Ubuntu EC2 задания cron нельзя редактировать или запускать с использованием crontab -e
или даже sudo crontab -e
(по любой причине). Я смог получить работу cron, работая:
-
touch/home/ubuntu/crontest.log
чтобы создать файл журнала -
sudo vim/etc/crontab
который редактирует общесистемный crontab - добавьте свое собственное задание cron от второй до последней строки, используя пользователя root, например
* * * * * root date && echo 'It works!'>>/home/ubuntu/crontest.log 2>&1
которое * * * * * root date && echo 'It works!'>>/home/ubuntu/crontest.log 2>&1
stdout и stderr в лог файл, который вы создали в шаге 1 - Убедитесь, что он работает, подождав 1 минуту, а затем
cat/home/ubuntu/crontest.log
чтобы увидеть вывод задания cron