Запланированное резервное копирование 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