Скрипт Bash не выполняется в CRON (может быть, это связано с командами Sudo?)

У меня есть сценарий bash, который использует туннелирование ssh для удаленного получения дампа PSQL, а затем помещает дамп в локальную базу данных MySQL.

Я не могу заставить CRON запустить его.

Я выполнил следующие шаги:

1) Побежал:

sudo crontab -e

2) Введите следующее, чтобы скрипт выполнялся каждые 10 минут. Скрипт также занимает около 2-3 минут для полного выполнения.

*/10 * * * * /home/ubuntu/psqlimport 2>&1 /home/ubuntu/cronlog.log

3) Побежал:

sudo chmod +x /home/ubuntu/psqlimport

4) Перезапустил КРОН:

sudo /etc/init.d/cron restart

Я проверяю свою базу данных, чтобы увидеть, были ли какие-либо обновления, и их нет, как будто скрипт никогда не выполнялся. Также не создается файл /home/ubuntu/cronlog.log. Когда я бегу:

bash psqlimport

Скрипт выполняется, как и ожидалось.

Почему задание CRON не выполняет скрипт?

Имя файла: psqlimport

#!bin/bash

###
#
# PostgreSQL to MySQL Dump  program
#
# Filename: psqlimport
# Description: This program dumps the 3 tables from a
# remote PostgreSQL database, converts the dump file
# into MySQL translatable INSERT INTO queries,
# and inputs the data into the local
#  MySQL Inbevdash6 database.
#
# Script can be copied to the
# /etc/cron.daily folder for daily database updates.
#
#
# Script written by ramabrahma@stackoverflow
# Date: December 15, 2015
# Version: 01
#


#Set the dump file and temp file
DUMPFILE='psql.dump.sql' || (echo "assign var failed" 1>&2; exit 1)
TMPFILE=`mktemp` || (echo "mktemp failed" 1>&2; exit 1)

#Tables to dump: table1, table2, table3
#Dump as INSERT queries statements


sudo -E sshpass -p "<remote host password>" \
ssh username@remote_host \
pg_dump -U database_username -t table1 \
 -t table2 -t table3 \
 --column-inserts --data-only psqldatabase \
 | awk '/^INSERT/ {i=1} /^SELECT/ {i=0} i' \
 > "$TMPFILE" \
 || (echo "pg_dump failed" 1>&2; exit 1)


#Adding transaction blocks to the dump file
(echo "start transaction; truncate table table1; "; \
echo "truncate table table2; "; \
echo "truncate table table3; "; \
cat "$TMPFILE"; echo 'commit;' ) \
 > "$DUMPFILE" \
 || (echo "parsing dump file failed" 1>&2; exit 1)

#Inputting the dump file to the MySQL database
mysql --defaults-file="/home/ubuntu/.mysql.db.cfg" < "$DUMPFILE" \
  || (echo "mysql failed" 1>&2; exit 1)

#Remove the temp file created
rm "$TMPFILE"
rm "$DUMPFILE"

person ramabrahma    schedule 18.12.2015    source источник


Ответы (1)


У вас есть ошибка в вашем шебанге:

#!bin/bash

Так должно быть

#!/bin/bash

bin/bash, вероятно, не является путем к чему-либо, если только вы не выполняете из /. Это не было проблемой, когда вы запускали сценарий вручную, так как bash psqlimport явно вызывает bash для оценки сценария. Вы сможете увидеть проблему в действии, если попытаетесь запустить ./psqlimport для запуска скрипта.

person Mr. DOS    schedule 18.12.2015