Вот ваша команда crontab:
00 1 * * * osmc cd /media/SAMSUNG/backups/work/daily && zip -r -FS Workdaily$(date +%a) /media/Data/Work
Вы заявляете:
Если я запускаю это вручную, он работает нормально.
Так что же все это означает, что команда работает отлично, когда вы вошли в систему, но не в crontab
правильно?
Ну, посмотри на свою команду. В частности, zip
. Когда вы вошли в свою систему, система знает, что нужно искать заданные пути - которые загружаются только при входе в систему - для получения zip
файла. Но когда вы запускаете это как crontab
, нет путей поиска для двоичных файлов и тому подобного; вам нужно явно указать путь к zip
файлу.
Поэтому я рекомендовал бы ход , which
, чтобы увидеть , где zip
двоичный файл на самом деле находится , как это:
which zip
Возвращаемое значение должно быть примерно таким; это то место, где оно установлено на моей локальной установке Ubuntu 12.04:
/usr/bin/zip
Сделайте то же самое с date
так:
which date
И возвращаемый результат должен быть примерно таким:
/bin/date
Теперь, зная это, настройте запись в crontab
чтобы явно вызывать полный путь к zip
файлу следующим образом:
00 1 * * * osmc cd /media/SAMSUNG/backups/work/daily && /usr/bin/zip -r -FS Workdaily$(/bin/date +%a) /media/Data/Work
И все должно работать нормально.
Тем не менее, размещение составных команд, подобных этой, в crontab, особенно для скрипта резервного копирования, является практикой. Сценарий может работать, но в конце концов он становится немного громоздким и запутанным в обслуживании.
Поэтому я бы порекомендовал создать простой сценарий Bash с этими командами внутри, а затем запустить crontab
для этого сценария Bash. Содержимое этого скрипта Bash может быть таким простым:
#!/bin/bash
cd /media/SAMSUNG/backups/work/daily && /usr/bin/zip -r -FS Workdaily$(/bin/date +%a) /media/Data/Work
Заметьте, я удалил osmc
поскольку это не команда; Я полагаю, это ссылка на вашего пользователя? Допустим, скрипт Bash называется my_backup.sh
и находится в вашем пользовательском каталоге с именем /home/kris
. Тогда новая запись в crontab
будет:
00 1 * * * /home/kris/my_backup.sh
Такая установка гораздо проще поддерживать по моему скромному мнению. И убедитесь, что скрипт выполняется, запустив на нем chmod
следующим образом:
chmod 744 /home/kris/my_backup.sh