Как перенаправить вывод в файл из крона?

Новая схема управления версиями является в значительной степени точно тем же как старыми 2,6 схемами управления версиями, за исключением того, что "3". используется вместо "2,6". Другими словами, вместо того, чтобы назвать выпуск после 2.6.39 версий 2.6.40, мы просто назвали его 3.0. Стабильные обновления, вместо 2.6.40.1, 2.6.40.2, и т.д. теперь 3.0.1, 3.0.2, и т.д. Вместо 2.6.41, мы имеем 3.1. И так далее.

Ничто не изменилось о модели разработки, окне слияния, цикле выпуска, и т.д. Единственное изменение - то, что у нас есть тот меньше компонента к номеру версии (т.е. 3.x вместо 2.6.x).

109
19.10.2012, 18:16
2 ответа

Я решил проблему. Существует два пути:

M1

Измените перенаправление от &>> кому: 2>&1. Так теперь crontab -e похож

*/1 * * * * /home/ranveer/vimbackup.sh >> /home/ranveer/vimbackup.log 2>&1

Я верю вышеупомянутым работам потому что по умолчанию cron использует sh выполнять задачу вместо bash так &>> не поддерживается sh.

M2

Измените оболочку по умолчанию путем добавления SHELL=/bin/bash в crontab -e файл.

163
27.01.2020, 19:29
  • 1
    cron похож sh: это не выбирает единственную программу. Существует много реализаций. Самая распространенная реализация является кроном Vixie. Я (текущий, не оригинал) автор другого. Я полагаю, что большинство демонов крона будет использовать систему sh, но это может варьироваться по тому, принимает ли это &>>. Некоторые демоны крона (как мой) не позволяют Вам измениться, с которым оболочка выполняет строки крона SHELL=... строки в crontab. Я рад, что Вы нашли решение, которое работает на Вас; просто мысль, на которую стоило указать там, является многими переменными, которые могли влиять, работает ли это на других. –  dubiousjim 19.10.2012, 18:50
  • 2
    Как вставить YYYY-MM-DD_hh-mm-sec на имя выходного файла, так, чтобы каждое имя файла отличалось и сохранено без перезаписи? –  Danijel 11.01.2016, 15:18
  • 3
  • 4
    */1 * * * * /home/ranveer/vimbackup.sh &>> /home/ranveer/vimbackup.log делает то же самое также. привет-ангел –  Yanick Girouard 15.08.2017, 17:56

отказ от ответственности [1].

Я хотел бы добавить сноску или дополнение к ответу @RanRag .

Убедитесь, что ваш синтаксис перенаправления оболочки соответствует /bin/sh. Если вы попытаетесь использовать недопустимый синтаксис перенаправления оболочки с /bin/sh, ваша команда завершится ошибкой, и ваше задание cron никогда не будет запущено.

Если в файлах конфигурации /etc/cron.d/example1вы укажете пользователя, отличного от root, и оболочка входа этого пользователя не /bin/bash... вы все равно должны использовать синтаксис /bin/sh в команде /etc/cron.d/example1.


Например

Если у вашего пользователя установлена ​​оболочка csh, zshили kshдля его оболочки входа в систему. В вашем конфигурационном файле /etc/cron.d/example1команда должна использовать синтаксис /bin/sh.В частности, любое перенаправление оболочки должно иметь синтаксис /bin/sh.

Если вы попытаетесь использовать, например, синтаксис перенаправления оболочки cshв своем /etc/cron.d/example1, ваше задание cron никогда не запустится. Файл журнала для crond, расположенный по адресу /var/log/cron, должен сказать, что команда запущена, но команда выдаст ошибку синтаксиса до того, как ваша команда будет запущена.

Где crondвыдает сообщения об ошибках синтаксиса?

Об ошибке никогда не сообщается в /var/log/cron. crondвместо этого по умолчанию выдает любые сообщения об ошибках, используя mail. Поэтому вы должны проверить /var/spool/mail/${USER}, чтобы увидеть, в чем ошибка.

[1]

Отказ от ответственности

  • Этот ответ предполагает систему sysv
  • systemdинформация может отличаться
  • Эта информация была получена специально для дистрибутива centos-6и может не относиться к другим дистрибутивам sysv.
    • Я упоминаю centos-6специально, потому что разные дистрибутивы могут иметь различную реализацию crond, которая отличается отcentos-6
9
20.08.2021, 13:20

Теги

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