crontab не работает как root

Mysql Сценарии резервного копирования не запускаются от имени корневого crontab - справка

Я пытаюсь запустить crontab с правами root, но сценарий не выполняется успешно. В системном журнале я вижу, что скрипт выполняется, но не завершается.

Mar 28 04:01:01 ubuntumaster CRON[16812]: (root) CMD home/wayne/scripts/mysql_backup.sh)

Запуск сценария из командной строки работает отлично ... вот сценарий:

MyUSER="root" # USERNAME
MyPASS="devan13" # PASSWORD
MyHOST="localhost" # Hostname

# Linux bin paths, change this if it can not be autodetected via which command
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
GZIP="$(which gzip)"

# Backup Dest directory, change this if you have someother location
DEST="/home/wayne/backup"

# Main directory where backup will be stored
MBD="$DEST/mysql"

# Get hostname
HOST="$(hostname)"

# Get data in dd-mm-yyyy format
NOW="$(date +"%d-%m-%Y")"

# File to store current backup file
FILE=""
# Store list of databases
DBS=""

# DO NOT BACKUP these databases
IGGY="thisdatabaseschema thatdatabase herdata mydata"     
[ ! -d $MBD ] && mkdir -p $MBD || :

# Only root can access it!
$CHOWN 0.0 -R $DEST
$CHMOD 0600 $DEST

# Get all database list first
DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"

for db in $DBS
do
skipdb=-1
if [ "$IGGY" != "" ];
then
for i in $IGGY
do
[ "$db" == "$i" ] && skipdb=1 || :
done
fi

if [ "$skipdb" == "-1" ] ; then
FILE="$MBD/$db.$HOST.$NOW.gz"
# do all inone job in pipe,
# connect to mysql using mysqldump for select mysql database
# and pipe it out to gz file in backup dir :)
$MYSQLDUMP --quick -u $MyUSER -h $MyHOST -p$MyPASS $db | $GZIP -9 > $FILE
fi
done

Спасибо, Уэйн

1
задан 18.05.2020, 03:43

5 ответов

я использую этот сценарий и прекращаю дело "легкий cronjob обработчик"

http://codecanyon.net/item/the-easycronjobhandler/6296537

0
ответ дан 18.05.2020, 03:44
  • 1
    Это может быть полезным инструментом, но Ваше сообщение не отвечает на вопрос. – J.K 18.05.2020, 03:44

Если Вы не пропустили некоторые символы при записи вывода системного журнала в вопросе, похоже на создание опечатки в команде CRON путем упущения / перед командой, которая должна быть похожей:

/home/wayne/scripts/mysql_backup.sh
0
ответ дан 18.05.2020, 03:44

Мои деньги на Benoit для того, чтобы иметь действительно корректный ответ здесь, но как только можно проверить, что сценарий выполняет Вас, вероятно, найдут некоторые дополнительные ошибки.

Короче говоря, удостоверьтесь, что Вы также проверяете свою среду! Вы - половина пути там при помощи переменных, которые определяют местоположение команд (MYSQL="$(which mysql)") но which mysql, просто читает Ваш PATH для определения его вывода. which в сценарии как это ничего не делает, Вы могли бы также просто записать mysql непосредственно, когда команда используется, или hardcode местоположение для mysql в переменной вместо того, чтобы использовать which, чтобы попытаться заполнить его для Вас.

На тестовой установке Ubuntu x64 12.04.3, * * * * * env > test.out в crontab показывает, что эти PATH /usr/bin:/bin. Если одна из Ваших команд не будет существовать в том PATH, то она не выполнится правильно!

Как заключительное предложение, добавьте set -x к верхней части своего сценария удара (предполагающий, что это - удар) отладить то, что на самом деле делает сценарий.

0
ответ дан 18.05.2020, 03:45
  • 1
    Спасибо за направление... мое предположение - то, что это - проблема пути. Благодарите Сообщество разработчиков ПО с открытым исходным кодом! любите Вас парни/галлоны – J.K 18.05.2020, 03:45

Проблема решена. Задание крона работало каждую ночь, но не завершалось. Проблема была со сценарием. Оболочка крона не интерпретировала "==" столь же равный, т.е. в оболочке крона "1 == 1" был оценен как ложь. Однако, когда я запустил программу в командной строке, это работало. Я считал где-нибудь, что оболочка удара понимает == или = для значения равный..., но оболочка Bourne не интерпретирует "==" как равная... Я должен был заменить мой "==" "=", и это хорошо работало. Спасибо за справку. Wayne

0
ответ дан 18.05.2020, 03:45

Удостоверьтесь для выполнения:

sudo crontab -e
(or crontab -e as root)

И добавляют желаемый сценарий:

*/15 * * * * /bin/bash /home/wayne/scripts/mysql_backup.sh

Это будет инициировать крон каждые 15 минут, очевидно, можно хотеть изменить это.

0
ответ дан 18.05.2020, 03:46

Теги

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