Что случилось с этими двумя заданиями крона?

Учитывая, что перезагрузка решила проблему, что Вы пропустили, то, что необходимо было сказать менеджеру по входу в систему (gdm) перезагружать его конфигурацию. Большинство системных служб не перезагружает свою конфигурацию при изменении ее на самом деле немного приложений автоматически перезагружают свои конфигурационные файлы при редактировании файла непосредственно (в противоположность прохождению через конфигурации того приложения UI).

В случае Gdm это не имеет команды для перезагрузки ее конфигурационного файла. Все, что можно сделать, перезапустить его; этого не происходит автоматически, когда Вы выходите из системы (это - все еще тот же экземпляр gdm, пока Вы не останавливаете его).

Обычный способ перезапустить системную службу состоит в том, чтобы выполнить что-то как одна из следующих команд (я забываю который менеджер по сервису Ваша версия использования Red Hat):

restart ssh
service ssh restart
/etc/init.d/ssh restart

Однако перезапуск gdm выходит из системы все пользователи, которые вошли в систему через него, таким образом, это обычно не желательно. Вместо этого выполненный gdm-safe-restart так, чтобы gdm перезапустил, как только последний пользователь выходит из системы. (Это не работает над некоторыми версиями/установками gdm, особенно на Ubuntu 10.04.)

13
17.11.2016, 04:48
3 ответа

Я настоятельно рекомендую поместить любые нетривиальные задания крона в их собственный файл сценария оболочки по многим причинам:

  • Легче отладить: можно просто запустить скрипт вместо копии, вставляющей длинную линию, и с правильной строкой хижины, это ведет себя намного больше очевидно, чем если бы у Вас были те же команды непосредственно в crontab
  • Легче читать: никакая потребность сделать это 200 + символьная острота, можно отформатировать его приятно, таким образом, легко читать и понять для всех
  • Добавьте сценарий к управлению версиями
14
27.01.2020, 19:52
  • 1
    И помещение неприятного % символы в сценарии предотвратят cron от превращения их в новые строки, который является Вашей настоящей проблемой. –  Ian D. Allen 23.11.2015, 08:37

Существует три частых причины для команд задания крона для поведения по-другому по сравнению с командами, введенными непосредственно в интерактивную оболочку в грубом порядке заурядности:

  • Крон обеспечивает ограниченную среду, например, минимальное $PATH, и другие ожидаемые пропавшие без вести переменных.
  • Крон вызывает /bin/sh по умолчанию, тогда как можно использовать некоторую другую оболочку в интерактивном режиме.
  • Крон рассматривает % символ особенно (это превращено в новую строку в команде).
  • Крон не обеспечивает терминальную или графическую среду.

Необходимо предшествовать всем % символы с a \ в crontab файле, который говорит крону просто помещать процент в команду. Помните это, когда Вы будете использовать date команда в задании крона.

55  8   *   *   3   /usr/bin/php /home/mark/dev/processes/customClient/events.php > "/home/mark/dev/processes/customClient/events-$(date +\%Y-\%m-\%d --date='last Wednesday')-$(date +\%Y-\%m-\%d).csv"
0   9   *   *   3   /usr/bin/echo 'The csv for last week, trying my hand at automatiging this' | /usr/bin/mutt <emailaddress> -s "Events from $(date +\%Y-\%m-\%d --date='last Wednesday')-$(date +\%Y-\%m-\%d)" -a "/home/mark/dev/processes/customClient/events-$(date +\%Y-\%m-\%d --date='last Wednesday')-$(date +\%Y-\%m-\%d).csv"

Я также решил некоторые проблемы заключения в кавычки:

  • Это не вызывало Вас проблемы кроме с четкостью, но Вы не должны использовать обратные галочки для замены команды. Использовать $(…) вместо этого: его правила парсинга более просты.
  • Всегда используйте двойные кавычки вокруг переменной и управляйте заменами: "$somevariable", "$(somecommand)". Здесь отсутствие кавычек было безопасно потому что date управляйте никогда не возвращал специального символа для форматов, которые Вы использовали, но необходимо тщательно помнить, какие символы специальны и проверяют этот каждый раз, когда Вы уезжаете, замена закрыла кавычки. Сохраните это простым, всегда используйте двойные кавычки, если Вы не хотите, чтобы полевое разделение и поколение имени файла произошли на результате.
  • У Вас были некоторые одинарные кавычки, предотвращающие расширение вокруг некоторых замен команды. Используйте двойные кавычки вместо этого.
30
27.01.2020, 19:52

Вы, кажется, вложили ' в mutt команда:

'События от date +%Y-%m-%d --date='last Wednesday'-date +%Y-%m-%d'

Попытайтесь использовать " вместо внутреннего ' так, чтобы оператор читал

'События от date +%Y-%m-%d --date="last Wednesday"-date +%Y-%m-%d'

0
27.01.2020, 19:52
  • 1
    онлайн, я не уверен, что это - какова проблема. Но после предоставления его выстрел в обоих заданиях крона выполнение без любого успеха. –  Mark D 12.09.2012, 18:50

Теги

Похожие вопросы