Рейтинг:2

Скрипт в cron.hourly не запускается

флаг us

У меня есть следующий файл в /etc/cron.hourly. Цель этого сценария — создавать резервную копию дампа docker-MongoDB каждый час, а затем использовать rclone для синхронизации этого файла дампа с содержимым в папке Google Диска.

Название скрипта:

rclone_Linux_MongoDB_Sync

Скрипт:

#!/бин/ш

/usr/bin/docker exec -it mongodb mkdir /data/dump
/usr/bin/docker exec -it mongodb mongodump --db myDB -u theUser -p thePassword --gzip --out /data/dump/

# Файл конфигурации RClone
RCLONE_CONFIG=/home/ubuntu/.config/rclone/rclone.conf
экспортировать RCLONE_CONFIG
#if [[ "`pidof -x $(basename $0) -o %PPID`" ]]; затем выйти; фи

/usr/bin/rclone sync /data/dump/myDB/MongoDB_Backup:MongoDB_Current

Я сделал:

sudo chmod +x /etc/cron.hourly/rclone_Linux_MongoDB_Sync
sudo chmod 777 /etc/cron.hourly/rclone_Linux_MongoDB_Sync

Обратите внимание, что у меня нет расширение для скрипта.Раньше это была моя проблема. Теперь, когда я запускаю следующее, мой скрипт отображается.

части запуска --test /etc/cron.hourly

Мой скрипт также работает правильно, когда я делаю:

./rclone_Linux_MongoDB_Sync

Он также запускается, когда я делаю:

части запуска /etc/cron.hourly

Я проверил /etc/crontab с помощью:

кошка /etc/crontab

Часть результата заключается в следующем. В моем понимании, это правильно.

17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 корневой тест -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * корневой тест -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

Я оценил журналы для cron следующим образом:

 grep CRON /var/log/syslog

Для ежедневного, еженедельного и ежемесячного, я полагаю, раньше они не работали из-за того, что анакрон не был установлен. Я установил анакрон с помощью:

sudo apt-get установить анакрон

cron.hourly запускается на 17-й минуте часа, как указано /и т.д./кронтаб. В соответствии с этим я вижу следующее повторяющееся каждый раз с отметкой времени 17.

19 июля 17:17:01 vps-fac5a33c CRON[1039453]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
19 июля, 17:17:09 vps-fac5a33c CRON[1039452]: (root) MAIL (отправил 104 байта вывода, но получил статус 0x004b от MTA#012)
19 июля 18:17:01 vps-fac5a33c CRON[1045250]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
19 июля, 18:17:18 vps-fac5a33c CRON[1045249]: (root) MAIL (отправил 104 байта вывода, но получил статус 0x004b от MTA#012)
19 июля 19:17:01 vps-fac5a33c CRON[1051174]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
19 июля, 19:17:21 vps-fac5a33c CRON[1051173]: (root) MAIL (отправил 104 байта вывода, но получил статус 0x004b от MTA#012)

Возможно, есть некоторые вещи, которые я сделал, о которых я забыл и не перечислил здесь.Тем не менее, я не понимаю, почему это не работает. Я просмотрел много разных сообщений на форуме, попробовал их процесс, но у меня не работает.

Почему мой скрипт не запускается каждый час, когда он помещен в /etc/cron.hourly?

Он не работает сам по себе. Он должен запускаться каждый час.

В качестве дополнительного примечания, мой скрипт ранее имел:

#!/бин/баш

Однако, основываясь на некоторых сообщениях, я изменил его на:

#!/бин/ш

Когда я бегу шеллчек на моем скрипте ничего не отображается, что указывает на то, что все в порядке в соответствии с шеллчек и синтаксически правильно:

проверка оболочки rclone_Linux_MongoDB_Sync

Добавлено следующее в начало скрипта после #!/бин/ш. Это нужно для того, чтобы увидеть, какие ошибки возникают в скрипте во время выполнения.

exec 1>>/tmp/rclone_Linux_MongoDB_Sync.log 2>&1

Я изменил crontab для .hourly на недавнее время, чтобы не ждать 17-минутной отметки для его запуска. Из-за вышеуказанного дополнения к моему файлу скрипта был создан следующий файл:

/tmp/rclone_Linux_MongoDB_Sync.log

После запуска:

 кошка /tmp/rclone_Linux_MongoDB_Sync.log

Отобразилось следующее.

устройство ввода не является TTY
устройство ввода не является TTY

Всем спасибо!

флаг us
1) Если `shellcheck` ничего не показывает, значит скрипт синтаксически корректен. 2) Никогда не используйте `chmod 777`, чтобы сделать скрипты доступными для записи всем пользователям (достаточно `755`, минимальное требование `u+rx`). 3) Часть про ежедневные/еженедельные/ежемесячные задачи можно убрать, это не имеет отношения (и анакрон здесь _не_ нужен; в тесте сказано "выполнять правую команду только в том случае, если анакрон не найден и не выполним, в этом случае последний занимает позаботьтесь об этом!) 4) Вы уверены, что ваша проблема сохраняется?
флаг hr
кстати, если вы когда-нибудь раскомментируете `#if [[`, вам нужно будет переключить шебанг обратно на `#!/bin/bash`, так как POSIX sh не поддерживает расширенный тест в стиле ksh `[[...]]`
geekygeek avatar
флаг us
Большое спасибо за советы. Я буду иметь это в виду, а также применю то, что вы упомянули, к моему сценарию.
geekygeek avatar
флаг us
Хорошо, я отредактировал свой ответ, включив в него то, что сейчас отображается в журналах.
geekygeek avatar
флаг us
Конечно пойдет, спасибо.
Рейтинг:1
флаг us

Итак, похоже, это проблема с Докер. При подаче команд в Докер через хрон, вместо -Это использовать только . теперь я изменил свой Докер команды соответственно.

Измененный скрипт:

#!/бин/ш
exec 1>>/tmp/rclone_Linux_MongoDB_Sync.log 2>&1
/usr/bin/docker exec -i mongodb mkdir /data/dump
/usr/bin/docker exec -i mongodb mongodump --db myDB -u theUser -p thePassword --gzip --out /data/dump/

# Файл конфигурации RClone
RCLONE_CONFIG=/home/ubuntu/.config/rclone/rclone.conf
экспортировать RCLONE_CONFIG
#if [[ "`pidof -x $(basename $0) -o %PPID`" ]]; затем выйти; фи

/usr/bin/rclone sync /data/dump/myDB/MongoDB_Backup:MongoDB_Current

Теперь скрипт может работать так, как предполагалось, и запускается автоматически каждый час. Исправление заключалось в изменении -Это в Докер команды просто .

флаг hr
Помните, что вы можете принять свой собственный ответ;)
Рейтинг:0
флаг us

Четвертая строка вашего скрипта выглядит подозрительно, что подтверждается шеллчек:

% shellcheck rclone_Linux_MongoDB_Sync
В строке 4 rclone_Linux_MongoDB_Sync:
/usr/bin/docker exec -it mongodb mongodump --db dashboarddb -u hifi_dbpc_host ->
    ^-- SC1009: Упомянутая синтаксическая ошибка была в этой простой команде.
    ^-- SC1073: Не удалось проанализировать это перенаправление. Исправьте, чтобы разрешить больше проверок.
    ^-- SC1072: Исправьте все упомянутые проблемы и повторите попытку.
geekygeek avatar
флаг us
Извинения. Похоже, что при копировании и вставке были некоторые ошибки. -> я полагаю, что это было от кошки, что указывает на то, что линия продолжается. Сейчас я обновил код.
geekygeek avatar
флаг us
Когда я запускаю шеллскрипт локально, ничего не отображается

Ответить или комментировать

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