Отправка вывода cron в файл с временной меткой в его имени

Вопрос или проблема

У меня есть crontab, похожий на этот, на конфигурации LAMP:

0 0 * * * /some/path/to/a/file.php > $HOME/cron.log 2>&1

Это записывает вывод файла в cron.log. Однако, когда он запускается снова, он перезаписывает все, что ранее было в файле.

Как я могу заставить cron выводить в файл с временной меткой в имени файла?

Пример имени файла мог бы выглядеть так: 2010-02-26-000000-cron.log

Мне не важно, в каком формате, главное, чтобы была какая-то временная метка.

Попробуйте:

0 0 * * * /some/path/to/a/file.php > $HOME/`date +\%Y\%m\%d\%H\%M\%S`-cron.log 2>&1

Попробуйте поэкспериментировать с форматом даты, если хотите; просто убедитесь, что вы экранируете любой %, как \%, как указано выше.

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

убрать

2>&1

… и пропустить это через скрипт временной метки перед сохранением в файл журнала.

Скрипт timestamp.sh:

#!/bin/bash
while read x; do
    echo -n `date +%d/%m/%Y\ %H:%M:%S`;
    echo -n " ";
    echo $x;
done

Не забудьте chmod +x timestamp.sh, чтобы сделать его исполняемым.

Затем отредактируйте строку задания cron, используя crontab -e, чтобы она выглядела так:

/path/to/my/command.sh 2>&1 | /path/to/timestap.sh >> /var/log/cron/my_log.log

Вы также можете добавлять ваш вывод в файл журнала, сделав это так:

0 0 * * * /some/path/to/a/file.php >> $HOME/cron.log 2>&1

Я модифицировал скрипт вот так:

`/bin/date +\%Y\%m\%d`.log

Я решил эту проблему; просто добавьте путь к дате (/bin/date) перед командой даты.

@daily /some/path/to/a/file.php 2>&1 > $HOME/$(date +\%Y\%m\%d\%H\%M\%S)-cron.log

Ответ или решение

Для решения задачи по отправке вывода cron-задачи в файл с временной меткой в его имени на системе LAMP, необходимо учитывать несколько аспектов. Давайте рассмотрим пошагово, как это можно реализовать, используя возможности командной оболочки и crontab.

Шаг 1: Понимание текущего задания

В вашем текущем crontab задании, вывод команды, выполняемой каждую ночь, записывается в файл cron.log в домашней директории. Однако каждое новое выполнение этой задачи перезаписывает предыдущий вывод, что может привести к потере важной информации.

Шаг 2: Создание имени файла с временной меткой

Для создания имени файла с временной меткой, вы можете использовать команду date. Важно правильно организовать команды с учетом экранирования символов, так как crontab обрабатывает символы % по-своему.

Шаг 3: Примеры изменения crontab

Вот как можно отредактировать вашу текущую настройку cron, чтобы вывод выполняемой команды сохранялся в файл с временной меткой в имени:

Основной метод

0 0 * * * /some/path/to/a/file.php > $HOME/$(date +\%Y\%m\%d\%H\%M\%S)-cron.log 2>&1

Здесь мы используем $(...), чтобы выполнить команду date и подставить результат в имя файла. Такие экранирования как \% необходимы для корректного выполнения в контексте cron.

Метод с добавлением вывода

Если вы хотите добавлять вывод в один файл вместо создания нового файла при каждом запуске, используйте следующую команду:

0 0 * * * /some/path/to/a/file.php >> $HOME/$(date +\%Y\%m\%d\%H\%M\%S)-cron.log 2>&1

Однако, как упоминалось ранее, этот метод перезапишет файл каждый раз. Чтобы избежать этого, стоит использовать другой подход.

Шаг 4: Использование скрипта для добавления временной метки к выводу

Как упомянуто в вашем вопросе, вы также можете создать скрипт для добавления временной метки к каждой строчке вывода. Создайте файл timestamp.sh с содержимым:

#!/bin/bash
while read x; do
    echo -n "$(date +'%d/%m/%Y %H:%M:%S') "
    echo "$x"
done

Не забудьте сделать его исполняемым с помощью команды:

chmod +x /path/to/timestamp.sh

Теперь измените вашу cron-задачу:

0 0 * * * /some/path/to/a/file.php 2>&1 | /path/to/timestamp.sh >> $HOME/my_log.log

Итог

Используя приведенные выше методы, вы можете эффективно управлять выводом ваших cron-задач, автоматизируя процесс логирования и сохраняя информацию о каждом запуске. Это обеспечит более организованный подход к обработке логов и упростит анализ работы ваших скриптов. Не забывайте проверять и тестировать ваши настройки cron, чтобы убедиться в их правильности и эффективности.

Оцените материал
Добавить комментарий

Капча загружается...