2014-09-05 3 views
0

Я создал список заданий cron (см. Ниже), используя sudo crontab -e в корневом файле crontab. Когда я запускаю команды отдельно в командной строке, они работают нормально, однако ни одно из заданий не выполняется cron. Любая помощь будет оценена по достоинству. Нужно ли добавить что-то еще в файл crontab?Что мешает моему заданию cron работать

48 * * * * Судо GZIP -k /calcservergc.log.*

49 * * * * для файла в /calcservergc.log.*.gz; do sudo mv $ file $ (имя хоста). $ {file: 1}; сделано

50 * * * * sudo rm $ (имя хоста). .log. .gz

ответ

1

Судо

Команда Sudo может не работать в кронтаб. Как правило, вам нужен пароль для запуска sudo, но может быть способ запустить его без пароля при работе в задании cron. Однако это не рекомендуется делать.

хрон

Вам нужно запустить хрон как пользователь, который имеет доступ к делать то, что вам нужно сделать. Cron работает с кратким списком конкретных путей. По умолчанию этот список довольно короткий. В linux я использую путь /sbin:/usr/sbin:/bin:/usr/bin.

Кроме того, пути должны быть более конкретными. Cron не работает как обычный пользователь, поэтому вам нужно быть более конкретным с путями и выводами этих команд.

Например, в первой команде, где будет размещен файл gzip?

Logrotate

Похоже, вы пытаетесь сжать файл журнала, а затем переместить файлы журнала, а затем удалить старые файлы журнала - это именно то, что logrotate выполняет. Было бы целесообразно установить. Logrotate решает проблемы, такие как файл журнала, который открывается при запуске этой команды. Обычно процесс, который имеет открытый файл журнала, не теряет дескриптор файла, даже если вы его переименовали, чтобы журнал продолжал записываться даже после его перемещения. Он также справляется с проблемой хранения архива последних файлов журнала, таких как syslog.1.gz, syslog.2.gz, syslog.x.gz или столько же, сколько у вас есть место для хранения или хотите сохранить для потомства.

Резюме

  • Не используйте Sudo в хронах
  • Будьте конкретны в пути при выполнении команд в хронах
  • Использования Logrotate для выполнения этой конкретной задачи в вашем вопросе
+0

Могу ли я просто удалить команды sudo, как это в корневом crontab? – user3344448

+0

Это глубже, чем просто удаление команды 'sudo'. Я надеюсь, что мой ответ будет более конкретным. – spig

0

I не имеют 50 баллов репутации, поэтому не можете комментировать ваш вопрос, поэтому я попытаюсь сказать это одним выстрелом.

Я обнаружил возможную проблему с вашими тремя командами, каждый из которых вызывается за одну минуту. Предположим, что первая операция длится более одной минуты (не должно произойти, но теоретически это возможно), ваш второй вызов не будет работать или хуже, он может работать на половине данных). Вы не хотите терять время, скажем, поставить 5-минутную задержку между вашими командами, это будет потеряно.

Что вы можете сделать, это создать сценарий оболочки, в который вы помещаете 3 команды. Таким образом, это предотвратит «крах» ваших операций.Поэтому просто поместите свои 3 команды в оболочку скрипта, и они будут выполняться один за другим.

Затем поместите свой файл в такое место, как/bin (вы также можете создать символическую ссылку с ln -s) и вызвать свой скрипт с помощью cron. (Будьте осторожны с путем в оболочке скрипта)

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

Вы можете попробовать два решения. Измените права на папку, в которой хранятся ваши файлы (с помощью chmod -r 777 или chmod 755 в папке) или переместите/скопируйте файлы в каталог, в котором у вас есть доступ к чтению и записи.

+0

Эти команды на самом деле 1 минута друг от друга, но независимо от того, что касается той же проблемы, о которой вы говорили. Лучший способ справиться с этим - использовать что-то вроде [logrotate] (http://linuxcommand.org/man_pages/logrotate8.html). – spig

+0

@spig Спасибо, было поздно, когда я отправил ответ, забыли его минуты, часы, день месяца, месяц, день недели. Я исправил ответ. –

Смежные вопросы