Я пытаюсь вывести текущую дату в этом формате в файл с помощью / etc / crontab. Но crontab не любит такое форматирование. Замена sh на bash не помогает.
my crontab:
* * * * * root echo "$(date +%F) - $(date +%T) - no sleep!" >> /home/thomas/1-18-WD/ami
ожидаемый результат в файл: 2021-05 -18 - 03:57:09 - без сна!
это сработает, только если я просто введу echo "$ (date) - no sleep!" Я думаю, что "+" вызывает проблему.
Проблема не в символах +
, а в символах %
, как объяснено здесь:
Однако вы можете упростить команду и избежать двух вызовов date
и echo
, переместив ваш текст в строку формата date
напрямую, т.е.. например, date "+%F - %T - no sleep!"
В кронтабе это должно быть записано так:
* * * * * root date "+\%F - \%T - no sleep!" >> /home/thomas/1-18-WD/ami
Задания выполняются через cron
, или at
, или batch
, не выполняются в той же среде выполнения, что и на рабочем столе. Ни одно из изменений PATH
или других переменных среды автоматически не распространяется на задание cron
. Например, нет $DISPLAY
, поэтому программы графического интерфейса пользователя нуждаются в особом подходе (прочитайте man xhost
).
Переменные среды можно задать для всех заданий cron
в файле crontab
Прочитайте man 5 crontab
.
Посмотрите на результаты echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
в каждой из ваших сред.
Поскольку часть command
строки crontab
по умолчанию интерпретируется /bin/sh
, который имеет более простой синтаксис, чем /bin/bash
, я рекомендую, чтобы command
был вызовом сценария bash
(исполняемого, смонтированного, начинающегося с7 #!/bin/bash
), который настраивает среду, а затем вызывает нужную программу.