я работаю над сценарием, который установит/установит задание крона для резервного копирования mysql
Это - мой сценарий
croncmd="5 1 * * * sudo /usr/local/sbin/mysqlFullBackup.sh > /var/log/mysql/mysqlFullBackupCron.log 2>&1"
if [[ $(crontab -l | egrep -v "^(#|$)" | grep -q "$croncmd"; echo $?) == 1 ]]
then
echo $(crontab -l ; echo "$croncmd") | crontab -
fi
Проблема состоит в том, что я - ошибка получения содержания плохой день месяца
"-":0: bad day-of-month
errors in crontab file, can't install.
Можно ли помочь мне правильно установить свое задание крона, таким образом, оно будет работать каждый день в 1:10 ночью.
При необходимости в какой-либо дополнительной информации сообщите мне, и я обеспечу.
Спасибо
Сценарий является напрасно сложным. Вы могли сделать:
croncmd='5 1 * * * sudo /usr/local/sbin/mysqlFullBackup.sh > /var/log/mysql/mysqlFullBackupCron.log 2>&1'
if ! crontab -l | egrep -v '^(#|$)' | grep -Fq "$croncmd"
then
( crontab -l; echo "$croncmd" ) | crontab -
fi
Когда Вы делаете echo $(crontab -l; echo "$croncmd")
, без любых кавычек содержание будет подвергнуто разделению поля и подстановочному расширению, когда оболочка развернет его. Так любой *
в нем будет расширенный до имен файлов в текущем каталоге, например:
$ echo $(echo "*")
bin Desktop dev Documents Downloads examples.desktop Music Pictures Public snap Templates Videos
Это легче и более просто использовать составную команду - ( crontab -l; echo "$croncmd" )" and send the output to
crontab' непосредственно, не используя дополнительное эхо.
Также с grep
, Вы не хотите, чтобы grep рассматривал 5 1 *
как регулярное выражение, так используйте -F
опция.