Cron Job в Ubuntu Hardy выполняет, но не удаляет файлы, как ожидалось - PullRequest
1 голос
/ 24 мая 2009

У меня тут немного рассола, и мне интересно, может кто-нибудь подсказать мне:

У меня есть задание cron, которое ежедневно выполняется для определенного пользователя и должно выполнять очистку файлов в определенном каталоге. Технически это две работы. Я включил cron.log, чтобы убедиться, что они действительно выполняются, и они:

May 24 11:03:01 AppNameGoesHere /USR/SBIN/CRON[11257]: (mongrel_AppNameGoesHere) 
  CMD (rm -rf /var/www/apps/AppNameGoesHere/current/public/
  {popular,index,purchasing,purchasing-alternate,support,about-us,guarantee,screenshots}.htm{,l})
May 24 11:04:01 AppNameGoesHere /USR/SBIN/CRON[11260]: (mongrel_AppNameGoesHere)
  CMD (rm -rf /var/www/apps/AppNameGoesHere/current/public/
  {stats,popular,bcf,articles,expenses})

Я удалил настоящие имена пользователей и отформатировал их, чтобы они были менее уродливыми в StackOverflow.

Теперь мой вопрос: несмотря на то, что я вижу, как эти удаления выполняются и, по-видимому, успешно выполняются в журнале, если я иду в указанный каталог, файлы все еще там. Сначала я подозревал, что разрешение hijinx продолжалось, но я убедился, что могу удалить файлы вручную, введя пользователя mongrel_AppNameGoesHere и выполнив отдельные команды rm или скопировав / вставив задачу cron в командную строку. Все, что я не удаляю вручную, остается открытым, несмотря на то, что дни, когда задание cron выполнялось успешно.

Какие-либо предложения о том, что может происходить? Ранее я использовал Dapper Drake с этими заданиями cron напрямую в файле / etc / crontab, и когда я обновился до Hardy, я переместил их в пользовательские crontabs (через sudo crontab -e - u mongrel_AppNameGoesHere), что и привело к их остановке. рабочий.)

1 Ответ

6 голосов
/ 24 мая 2009

Проблема в том, что {} является частью расширения оболочки, предоставляемого оболочкой , поэтому, чтобы это работало, вам нужно изменить оболочку, которая выполняет записи cron.

По умолчанию используется / bin / sh, поэтому просто введите:

SHELL = / bin / bash

в качестве первой строки в вашем crontab, чтобы все снова заработало.

...