2016-05-11 2 views
0

У меня есть сценарий, который отлично работает, когда я вручную запускаю его самостоятельно, но, похоже, не работает должным образом из crontab.Сценарий Cronjob не работает должным образом

Основная ошибка заключается в том, что (внешние) переменные среды не установлены.

Я добавил SHELL=/bin/bash над определением cronjob, но все же получил те же ошибки.

Сценарий, который я скопировал и вставил ниже. Приветствия для помощи

#!/bin/bash 
# export MYSQL_PORT_3306_TCP_ADDR=`awk 'NR==1 {print $1}' /etc/hosts` 

set -e 

MOUNT=/mnt/s3b/ 
BACKUP=/root/backups 
mkdir -p $BACKUP 
NOW=$(date +"%Y-%m-%d-%H%M") 
DB_FILE="$MYSQL_ENV_MYSQL_DATABASE.$NOW.sql" 

/usr/bin/s3fs <bucket_name> $MOUNT -ouse_cache=/tmp -odefault_acl=public-read -ononempty 

mysqldump -h$MYSQL_PORT_3306_TCP_ADDR -uroot -p$MYSQL_ENV_MYSQL_ROOT_PASSWORD $MYSQL_ENV_MYSQL_DATABASE > /tmp/$DB_FILE 

tar -czvf $BACKUP/"$DB_FILE.tar.gz" -P /tmp/$DB_FILE 

cp $BACKUP/"$DB_FILE.tar.gz" $MOUNT/data/ 

ошибка, как вы можете увидеть ниже всех переменных окружения возвращающие:

May 11 00:17:59 fcf074b9e5ee kernel: [293368.874868] SELinux: mount invalid. Same superblock, different security settings for (dev mqueue, type mqueue) 
May 11 00:18:14 fcf074b9e5ee kernel: [293383.903080] docker0: port 6(veth2f6467f) entered forwarding state 
May 11 01:29:26 fcf074b9e5ee s3fs[78]: s3fs.cpp:s3fs_init(3334): init v1.79(commit:unknown) with OpenSSL 
May 11 01:29:26 fcf074b9e5ee s3fs[78]: s3fs.cpp:s3fs_check_service(3729):  Could not connect wrong region us-east-1, so retry to connect region eu-west-1. 
May 11 01:31:10 fcf074b9e5ee s3fs[93]: s3fs.cpp:s3fs_init(3334): init v1.79(commit:unknown) with OpenSSL 
May 11 01:31:10 fcf074b9e5ee s3fs[93]: s3fs.cpp:s3fs_check_service(3729): Could not connect wrong region us-east-1, so retry to connect region eu-west-1. 
    May 11 10:25:02 fcf074b9e5ee kernel: [329791.913331] hrtimer: interrupt took 2331455 ns 

    mysqldump -h -uroot -p > /tmp/.2016-05-11-0015.sql 
+3

Где все переменные, такие как '$ MYSQL_ENV_MYSQL_ROOT_PASSWORD' определены? –

+1

Что вы установили в качестве своего кронтаба? Одна вещь, которую вы могли бы попробовать, - сначала установить ваш '.profile' перед вашим crontab следующим образом:' 0 0 * * *. ~/.profile; ваш скрипт crontab' –

+0

Вы задали тот же вопрос вчера, а затем удалили его. Опять же: как вы создали свою крона? – fedorqui

ответ

0

Как @ что-другой-парень указал, переменные окружения $ MYSQL_ENV_MYSQL_DATABASE, $ MYSQL_ENV_MYSQL_ROOT_PASSWORD являются не задано.

Переменные окружения наследуются от процесса к детям, когда вилки процесса. Это означает, что задания crontab наследуют среду от службы crontab. Переменные окружения, установленные в оболочке при установке задания crontab, не будут сохранены.

Вы должны добавить в ваш сценарий оболочки:

MYSQL_ENV_MYSQL_DATABASE="mydatabase" 
MYSQL_ENV_MYSQL_ROOT_PASSWORD="mypassword" 
Смежные вопросы