2015-04-30 5 views
0

Когда я хочу сжать папку вручную я использую команду:Проблемы запуск дегтя из кронтаба

tar -zcvf $dirBackup-$actualTime.tgz $dirBackup; 

И это прекрасно работает. Также, когда я распаковываю архив, результат правильный.

Но у меня возникла проблема, когда я запускаю ту же команду из crontab: только что полученный tgz содержит пустой файл.

crontab -l>> /home/user/Desktop/test/temp; 
echo "$min $hour * * * tar -zcvf $dirBackup-$actualTime.tgz $dirBackup">> temp; 
crontab temp; 

Нужно ли мне что-либо менять в выражении crontab? Должен ли я быть root для запуска crontab? Файл temp создан правильно и находится в правой папке.

Большое спасибо за внимание!

+0

могли бы вы показать, как эта работа выглядит в вашем кронтаб (не так, как вы пытаетесь написать там)? вопрос возник из-за того, что вы используете env vars и интересуетесь тем, что находится (например, относительный путь, полный путь?) – Dieselist

+1

опубликовать вывод 'crontab -l'. – iqstatic

ответ

1

В зависимости от вашей системы, crontab задания может или не может быть запущен в вашем $HOME каталоге (на самом деле они обычно работают либо в / или в /var/cron). Добавьте команду cd $HOME; перед командой tar.

+0

Я сделал это, и он не работает. Может быть, это может быть причиной привилегий? Я имею в виду, нужно ли быть root, чтобы сделать crontab? – Reaper

+0

Вы можете проверить, снова запустив 'crontab -l'. – lcd047

+0

@Reaper Чтобы ответить на ваш вопрос, во-первых, не обязательно быть пользователем root, чтобы сделать cronjob. Каталог, к которому вы пытаетесь получить доступ, должен быть доступен из контекста этого пользователя. Если это не так, то проблема с разрешением появится. – iqstatic

1

Вам необходимо установить значение переменных в команде echo, которую вы используете, чтобы добавить запись в задание cron. Образец сценарий должен выглядеть следующим образом:

#!/bin/bash 

min=30 
hour=17 
dirBackup=/home/user/Desktop 
actualTime=30-04-2015 

crontab -l >> /home/user/temp 
echo "$min $hour * * * tar -zcvf $dirBackup-$actualTime.tgz $dirBackup 2>&1 | tee /tmp/cron.log">> /home/user/temp; 
crontab /home/user/temp; 

Полученный деготь файл будет создан в домашнем каталоге пользователя (пользователь, с которым хроны запускаются).

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

crontab -u <username> <cron_file> 
+0

Фактически im устанавливает значения min и hour из консоли чтения. Но я не знаю, почему это не работает. Они выполняют резервное копирование в определенное время, но это пустой файл. Я читал, что иногда необходимо установить новую строку в файле crontab. Это правда? – Reaper

+0

@Reaper Где передается значение 'dirBackup'? Является ли значение «dirBackup» здоровым? – iqstatic

+0

Да, это правильно значение dirBackup. – Reaper

Смежные вопросы