Получить размер файла не работает в запланированном задании - PullRequest
0 голосов
/ 16 июня 2020

У меня есть сценарий bash, работающий в Ubuntu 18.04. Я запланировал это с помощью таймера SYSTEMD.

    #!/bin/bash
backupdb(){
   /usr/bin/mysqldump -u backupuser -pbackuppassword --add-locks --extended-insert --hex-blob $1 > /opt/mysqlbackup/$1.sql
   /bin/gzip -c /opt/mysqlbackup/$1.sql > /opt/mysqlbackup/$1-$(date +%A).sql.gz
   rm -rf /opt/mysqlbackup/$1.sql
   echo `date "+%h %d %H:%M:%S"`": " $1 "- Size:" `/usr/bin/stat -c%s "${1}-$(date +%A).sql.gz"` >> /opt/mysqlbackup/backupsql.log
}

# List of databases to backup
backupdb cardb
backupdb bikedb

Когда я запускаю этот скрипт в интерактивном режиме, в журнале резервного копирования появляются 2 записи:

Jun 16 20:15:03:  cardb - Size: 200345
Jun 16 20:15:12:  bikedb - Size: 150123

Однако, когда это запускается как служба таймера SYSTEMD , журнал по-прежнему получает 2 записи, но размер файла в файле журнала не указан. Не 0, просто пусто. Резервный файл cardb. sql .gz создается и не равен нулю. Я могу распаковать его, и он действительно содержит действительный файл SQL.

Я не могу понять, почему это происходит.

1 Ответ

1 голос
/ 17 июня 2020

Вам необходимо указать абсолютный путь к вашему файлу.

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

echo `date "+%h %d %H:%M:%S"`": " $1 "- Size:" `/usr/bin/stat -c%s "/opt/mysqlbackup/${1}-$(date +%A).sql.gz"` >> /opt/mysqlbackup/backupsql.log
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...