Задание крона плохой день месяца

я работаю над сценарием, который установит/установит задание крона для резервного копирования 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 ночью.

При необходимости в какой-либо дополнительной информации сообщите мне, и я обеспечу.

Спасибо

0
задан 9 November 2017 в 03:17

1 ответ

Сценарий является напрасно сложным. Вы могли сделать:

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 tocrontab' непосредственно, не используя дополнительное эхо.


Также с grep, Вы не хотите, чтобы grep рассматривал 5 1 * как регулярное выражение, так используйте -F опция.

3
ответ дан 1 November 2019 в 06:11

Другие вопросы по тегам:

Похожие вопросы: