Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Как в cron, в команде получить текущую время-дату?  (Прочитано 4403 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Tokh

  • Автор темы
  • Активист
  • *
  • Сообщений: 705
    • Просмотр профиля
В команде выполняемой из cron файла нужно вставить текущую дату (время).
Запаздывание в 1-3 секунды от нулевой секунды не страшно, потому сгодится и подстановка даты-времени записанного запуска команды.

Например:
dt_t="$(date '+%Y-%m-%d')"
* * * * * root echo "Hello world!" > /tmp/report-${dt_t}.txt
или
* * * * * root dt_t=`date '+%Y-%m-%d'` ; echo "Hello world!" > /tmp/report-${dt_t}.txt
* * * * * root dt_t="$(date '+%Y-%m-%d')" && echo "Hello world!" > /tmp/report-${dt_t}.txt

По задумке должно создавать файл "/tmp/report-2009-10-12.txt" с содержимым "Hello world!". Но из cron это не работает. Если конструкцию `date '+%Y-%m-%d'` заменить просто алфавитно-цифровыми символами, то срабатывает.

Как сделать?
StarDict и Mueller помогут против английского мануала.

Оффлайн Polkan

  • Участник
  • *
  • Сообщений: 124
    • Просмотр профиля
Примечательно, что в таком, например, виде
* * * * * cd /home/polkan/temp && echo "test" > report-$(date)работает. Но файлы выглядят жутковато  :)

Не работает только при попытке как-то форматировать выводимую дату.


Пользователь решил продолжить мысль 12 Октября 2009, 22:43:14:
Решение, однако, найдено! И имя ему - экранирование:
* * * * * cd /home/polkan/temp && echo "test" > report-$(date \+\%Y-\%m-\%d)работает правильно.
« Последнее редактирование: 12 Октября 2009, 22:43:14 от Polkan »

Оффлайн Tokh

  • Автор темы
  • Активист
  • *
  • Сообщений: 705
    • Просмотр профиля
Экран или в кавычки взять, как выше. Да.

Но как засунуть это в переменную? Эта переменная используется в нескольких командах. Более того, есть желание вычитать из этой переменной, если она число.
В мане пишут, что не происходит разбора строки для подстановки значений переменных.
(Нажмите, чтобы показать/скрыть)
Но может есть какой-то финт, кроме как выносить все запуски в отдельные скрипты... Внутренние спец переменные и т.п.
« Последнее редактирование: 12 Октября 2009, 22:56:39 от u-375 »
StarDict и Mueller помогут против английского мануала.

Оффлайн Polkan

  • Участник
  • *
  • Сообщений: 124
    • Просмотр профиля
Экран или в кавычки взять, как выше. Да.
Как раз с кавычками оно не работает. По крайней мере у меня. Ни с какими.

Но как засунуть это в переменную? Эта переменная используется в нескольких командах...
В нескольких командах в пределах одного крон задания... хм... что-то мне кажется, что придется все же выносить их все в отдельный скрипт.
Про "внутренние переменные"  или что-то в этом роде не слыхал.


Пользователь решил продолжить мысль 13 Октября 2009, 09:42:56:
Придумал костыль - вместо переменной, можно использовать временный файл (на случай, если необходимо все-таки делать это все из строки крон-задания)  :)
* * * * * cd /home/polkan/temp && echo $(date \+\%Y-\%m-\%d) > tmp && echo "test" > report-$(cat tmp) && rm tmp
« Последнее редактирование: 13 Октября 2009, 09:42:56 от Polkan »

 

Страница сгенерирована за 0.017 секунд. Запросов: 20.