Подтвердить что ты не робот

Не удается заставить 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/

Есть ли у кого-нибудь советы или возможные решения?

Спасибо за ваше время.

4b9b3361

Ответ 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, работая:

  1. touch/home/ubuntu/crontest.log чтобы создать файл журнала
  2. sudo vim/etc/crontab который редактирует общесистемный crontab
  3. добавьте свое собственное задание 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
  4. Убедитесь, что он работает, подождав 1 минуту, а затем cat/home/ubuntu/crontest.log чтобы увидеть вывод задания cron