SRV_ADMIN Telegram 4635
На днях столкнулся в небольшой ошибкой в скриптах для бэкапа, когда настраивал их работу через cron. Я уже не раз упоминал, что в скриптах лучше всегда писать полные пути. Я это обычно соблюдаю, особенно для исполняемых файлов. А тут ошибся немного в другом.

Делал большой скрипт, где было много разных операций, в том числе одна из них была с rsync. Строка выглядела примерно так:

/usr/bin/rsync --progress -av --delete --delete-excluded --exclude-from=$EXCLUDE_LST -e "ssh -p 31008" [email protected]:/home/bitrix/ext_www/site01 /mnt/backups/site01/www --backup --backup-dir=/mnt/backups/site01/www_increment/`date +%Y-%m-%d`/`date +%H-%M-%S` 2>&1 >> /mnt/backups/site01/log.txt

Я тут раскрыл все переменные, чтобы было понятно, о чём идёт речь, кроме одной - $EXCLUDE_LST. Это файл со списком исключений. Задал его вот так:

EXCLUDE_LST=exclude-site01.lst

То есть просто указал на файл, который лежит тут же в директории. Когда отлаживаешь и запускаешь вручную - всё работает. А через cron - нет. А так как в скрипте было много различных действий, я сходу не смог понять, почему не работает конкретно эта синхронизация. Несколько раз глазами пробежал, не пойму, где ошибка и почему всё работает, а конкретно это не синхронизируется. Вывод rsync направлен в лог, обычно там его ошибки видно, но не в этот раз. Он просто не запускался.

Потом заглянул в системную почту, и там всё понятно:

rsync: [client] failed to open exclude file exclude-site01.lst: No such file or directory (2)
rsync error: error in file IO (code 11) at exclude.c(1481) [client=3.2.7]

Rsync просто даже не запускался из-за того, что не видел этот файл. В общем, очередное напоминание, что в скриптах лучше всегда всё писать с полными путями, чтобы потом не тратить время на отладку.

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

#linux #cron



tgoop.com/srv_admin/4635
Create:
Last Update:

На днях столкнулся в небольшой ошибкой в скриптах для бэкапа, когда настраивал их работу через cron. Я уже не раз упоминал, что в скриптах лучше всегда писать полные пути. Я это обычно соблюдаю, особенно для исполняемых файлов. А тут ошибся немного в другом.

Делал большой скрипт, где было много разных операций, в том числе одна из них была с rsync. Строка выглядела примерно так:

/usr/bin/rsync --progress -av --delete --delete-excluded --exclude-from=$EXCLUDE_LST -e "ssh -p 31008" [email protected]:/home/bitrix/ext_www/site01 /mnt/backups/site01/www --backup --backup-dir=/mnt/backups/site01/www_increment/`date +%Y-%m-%d`/`date +%H-%M-%S` 2>&1 >> /mnt/backups/site01/log.txt

Я тут раскрыл все переменные, чтобы было понятно, о чём идёт речь, кроме одной - $EXCLUDE_LST. Это файл со списком исключений. Задал его вот так:

EXCLUDE_LST=exclude-site01.lst

То есть просто указал на файл, который лежит тут же в директории. Когда отлаживаешь и запускаешь вручную - всё работает. А через cron - нет. А так как в скрипте было много различных действий, я сходу не смог понять, почему не работает конкретно эта синхронизация. Несколько раз глазами пробежал, не пойму, где ошибка и почему всё работает, а конкретно это не синхронизируется. Вывод rsync направлен в лог, обычно там его ошибки видно, но не в этот раз. Он просто не запускался.

Потом заглянул в системную почту, и там всё понятно:

rsync: [client] failed to open exclude file exclude-site01.lst: No such file or directory (2)
rsync error: error in file IO (code 11) at exclude.c(1481) [client=3.2.7]

Rsync просто даже не запускался из-за того, что не видел этот файл. В общем, очередное напоминание, что в скриптах лучше всегда всё писать с полными путями, чтобы потом не тратить время на отладку.

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

#linux #cron

BY ServerAdmin.ru


Share with your friend now:
tgoop.com/srv_admin/4635

View MORE
Open in Telegram


Telegram News

Date: |

Telegram has announced a number of measures aiming to tackle the spread of disinformation through its platform in Brazil. These features are part of an agreement between the platform and the country's authorities ahead of the elections in October. The initiatives announced by Perekopsky include monitoring the content in groups. According to the executive, posts identified as lacking context or as containing false information will be flagged as a potential source of disinformation. The content is then forwarded to Telegram's fact-checking channels for analysis and subsequent publication of verified information. On Tuesday, some local media outlets included Sing Tao Daily cited sources as saying the Hong Kong government was considering restricting access to Telegram. Privacy Commissioner for Personal Data Ada Chung told to the Legislative Council on Monday that government officials, police and lawmakers remain the targets of “doxxing” despite a privacy law amendment last year that criminalised the malicious disclosure of personal information. When choosing the right name for your Telegram channel, use the language of your target audience. The name must sum up the essence of your channel in 1-3 words. If you’re planning to expand your Telegram audience, it makes sense to incorporate keywords into your name. But a Telegram statement also said: "Any requests related to political censorship or limiting human rights such as the rights to free speech or assembly are not and will not be considered."
from us


Telegram ServerAdmin.ru
FROM American