Cron: Почему мои скрипты cron не работают, хотя cron работает

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

Сервер 1:

ps -ef | grep cron root 2350 1 0 Apr23 ? 00:00:26 /usr/sbin/cron root 14293 9533 0 10:52 pts/4 00:00:00 grep cron 

Сервер 2:

 ps -ef | grep cron root 11269 8661 0 10:52 pts/1 00:00:00 grep cron root 21726 1 0 Jan30 ? 00:00:31 /usr/sbin/cron 

Сервер 1

 crontab -e # mh dom mon dow command 0 3 * * * /home/deploy/scripts/clearzip.sh 19 2 * * * /media/attachment/send_db.sh 

send_db.sh

 #! /bin/bash pg_dump -C "DB_NAME" | bzip2 | sshpass -v ssh user@server2 "bunzip2 | psql "DB_NAME"" pg_dump -C "DB2" | bzip2 | sshpass -v ssh user@server2 "bunzip2 | psql "DB2"" 

Server2:

 # mh dom mon dow command 12 2 * * * ./home/postgres/stop_services.sh 17 2 * * * ./home/postgres/dropdb.sh 55 5 * * * ./home/postgres/start_services.sh 

stop_services.sh:

 #! /bin/bash echo > >(tee -i /home/deploy/logfile.txt) sh /home/deploy/tomcat7/bin/catalina.sh stop killall java killall screen 

dropdb.sh

 su -c "psql -c 'drop database "DB1";'" -s /bin/sh postgres su -c "psql -c 'create database "DB1";'" -s /bin/sh postgres su -c "psql -c 'drop database "DB2";'" -s /bin/sh postgres su -c "psql -c 'create database "DB2";'" -s /bin/sh postgres 

Что я могу сделать неправильно? Есть идеи?

Обновить

Ошибки в файле журнала

 could not change directory to "/root": Permission denied could not change directory to "/root": Permission denied could not change directory to "/root": Permission denied could not change directory to "/root": Permission denied /home/postgres/start_services.sh: line 5: service: command not found /home/postgres/start_services.sh: line 6: service: command not found 

One Solution collect form web for “Cron: Почему мои скрипты cron не работают, хотя cron работает”

Я вижу две проблемы:

  1. Вы выполняете действия, требующие прав root, но выполняете их как обычный пользователь.

  2. Вы используете имена команд без их полного PATH, и поэтому сеанс, открытый cron, не знает, где их найти.

Чтобы исправить 1., не используйте crontab -e и вместо этого отредактируйте /etc/crontab или, что еще проще, запустите sudo crontab -e чтобы добавить его в crontab root. Затем отредактируйте свой dropdb.sh и удалите su (скрипт теперь будет запущен root, поэтому нет необходимости в su ).

Чтобы исправить 2, самым простым подходом было бы определение PATH в crontab. Он должен выглядеть так:

 PATH=/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin # mh dom mon dow command 12 2 * * * ./home/postgres/stop_services.sh 17 2 * * * ./home/postgres/dropdb.sh 55 5 * * * ./home/postgres/start_services.sh 

Кроме того, отредактируйте свои скрипты и убедитесь, что все они используют абсолютные пути (так /usr/sbin/service вместо service ).

  • экспорт PATH постоянно
  • Как сбросить USB-устройство с помощью скрипта?
  • Как правильно удалить странные символы в сценарии bash?
  • Как выполнить команды Netscaler через удаленную машину через SSH-соединение
  • Выполнять поиск по двум спискам
  • Как мне выйти из SSH после запуска процесса с выходом, чтобы он работал?
  • Фильтрация вывода журнала на отдельных линиях
  • Записать журнал для ложной инструкции условия if, которая возвращает exit 2
  • Почему этот скрипт рыбы не запускается из пусковой установки?
  • Проблема с strongSwan
  • Как я могу отказаться от оболочки после выхода из команды, которую я начал с помощью сценария tmux?
  • Как вы запускаете последовательность команд в командном инструменте?
  • Interesting Posts

    Взаимозависимые конфликтующие пакеты в CentOS 6.5

    + или @ после запуска 'ls -al'

    Как восстановить 70-persistent-net.rules без перезагрузки?

    Добавить строку в список, используя AWK или SED?

    Выполнить ту же команду несколько раз в фоновом режиме

    изменение имени некоторых файлов навалом

    Имеет ли FreeBSD проблемы с использованием ext2fs с внешними жесткими дисками USB, размер сектора которых составляет 4096 байтов?

    Логистика копирования большого количества файлов scp-сервера на сервер. Как определить прогресс?

    Проверка того, может ли парольная фраза расшифровывать симметрично зашифрованные файлы

    Проблемы с наушниками Lenovo ThinkPad (комбинированный разъем)

    Сценарий Bash – запуск приложения и отображение живого выхода

    Использование вывода команды в printf в ksh

    используя tr -t command

    У CentS-7 Kernel Image есть суффикс «debug» после установки Kickstart

    Запуск 32-разрядного приложения на 64-битной машине Linux

    Linux и Unix - лучшая ОС в мире.