2015-04-17 5 views
1

У меня возникла проблема, из-за которой я не могу найти какую-либо информацию, выполняя обширный поиск в Google.Переменная дата не работает в linux cron

У меня есть linux cron, работающий через crontab, который отлично работает, пока я не попытаюсь добавить дату переменной в заголовок файла. НО .. Когда я запускаю ту же команду вне cron, как раз из командной строки, она отлично работает. Кроме того, cron работает, если я выберу часть даты.

Командная строка кода, которая работает:

sudo mysqldump -h mysql.url.com -u user -pPassword intravet sites | gzip > /mnt/disk2/database_`date '+%m-%d-%Y'`.sql.gz 

Крон, который работает:

15 2 * * * root mysqldump -h mysql.url.com -u user -pPassword intravet sites | gzip > /mnt/disk2/database.sql.gz 

Крон, который не работает:

15 2 * * * root mysqldump -h mysql.url.com -u user -pPassword intravet sites | gzip > /mnt/disk2/database_`date '+%m-%d-%Y'`.sql.gz 

Я не понять, почему я не могу использовать функцию даты, находясь внутри cron? Все, что я нахожу, говорит, что я могу, но на практике я не могу.

деталь сервера: Ubuntu 12.04.5

Спасибо за любую проницательность.

+0

От человека странице: 'А "%" символов в команде, если не с обратной косой чертой (\) , будут заменены на символы новой строки, и все данные после первого% будут отправлены команде в качестве стандартного ввода. ' – dg99

ответ

2

Вам просто нужно использовать спасаясь % Подписать

* * * * * touch /tmp/foo_`date '+\%m-\%d-\%Y'`.txt 

Результат:

[[email protected] tmp]# ls -l /tmp/foo_* 
-rw-r--r-- 1 root root 0 Apr 18 02:17 /tmp/foo_04-18-2015.txt 
+0

Ни одна из этих работ не была выполнена, я провел некоторое исследование и выяснил, что оболочка по умолчанию недоступна из cron tab. Я все еще не решил проблему, но я считаю, что это причина. – Jason

+0

Что вы подразумеваете под оболочкой, недоступной из crontab? cron использует значение по умолчанию 'SHELL =/bin/bash' переменная – Satish

+0

Ок. Итак, мой путь к оболочке был неправильным, ТОГДА добавив обратную косую черту, чтобы избежать исправления моей проблемы! Спасибо, ребята, так много. – Jason

0

Попробуйте заменить кавычку с $() и избежать ваши % с, такие как:

15 2 * * * root mysqldump -h mysql.url.com -u user -pPassword intravet sites | gzip > /mnt/disk2/database_$(date '+\%m-\%d-\%Y').sql.gz 

Я только упомянуть удаление кавычку, потому что вы в конечном итоге, все виды избежать проблем в дальнейшем в ваших начинаниях кодирования. Stick с использованием $() для замены команд.