Мне нужно, чтобы сжатие ZIP происходило на другом диске, чем на сервере, из-за ограниченного пространства.

Вот команда - строка, которую я использую в crontab:

00 1 * * * osmc cd /media/SAMSUNG/backups/work/daily && zip -r -FS  Workdaily$(date +%a) /media/Data/Work

Это должно бежать ежедневно в 1:00, но это не так. Кажется, он попал в cd /directory .

Если я запускаю это вручную, он работает нормально.

1 ответ1

1

Вот ваша команда 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .