Запланированное резервное копирование Crontab не выполняется

Мне нужно, чтобы сжатие 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 ответ

Решение

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

And the output returned should be something like:

/bin/date

Now knowing that, adjust your crontab entry to explicitly call the full path to zip как это:

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

And all should work fine.

That said, placing compound commands like that in a crontab—especially for a backup script—is back practice. The script might work, but in the end it becomes a tad cumbersome and confusing to maintain.

So I would recommend creating a simple Bash script with those commands inside of it and then running crontab on that Bash script. The contents of that Bash script could be something as simple as this:

#!/bin/bash
cd /media/SAMSUNG/backups/work/daily && /usr/bin/zip -r -FS  Workdaily$(/bin/date +%a) /media/Data/Work

Note I removed osmc since that is not a command; I believe it's a reference to your user? So let's say the Bash script is named my_backup.sh and is in your user directory named /home/kris, Then the new crontab запись будет:

00 1 * * * /home/kris/my_backup.sh

A setup like that is much easier to maintain in my humble opinion. And be sure that script is executable by running chmod on it like this:

chmod 744 /home/kris/my_backup.sh
Другие вопросы по тегам