Поскольку оболочка запускается без hup
, она получает сигнал SIGHUP
при закрытии сеанса и отправляет его всем процессам в конвейере. Поскольку вторая команда mysql
снова выполняется без nohup
, она прекращает работу и отправляет SIGPIPE
в nohup mysqldump
, что, в свою очередь, заканчивается.
Попробуйте
nohup sh -c 'mysqldump -hxxx -Pxxx -uxxx -pxxx --dump-slave --include-master-host-port --apply-slave-statements -f -q -A -E -R | mysql -hxxxx -Pxxxx -uxxxx -pxxxx' &
-121--166105- Это зависит от типа загружаемых файлов.
Если это базы данных или несжатые дампы, scp более эффективен, если они сжаты, FTP более эффективен, scp более безопасен.
Часто во внутренней сети я иду commando и делаю деготь поверх netcat's.
Если содержимое является инкрементным и всегда является одним и тем же файлом и не сильно меняется с течением времени, хорошая идея заключается в выполнении rsync поверх ssh.
-121--243116-Отношение процессов в трубе в основном зависит от используемой оболочки.
Современные оболочки делают все простые процессы (команды) в трубе прямыми потомками основной оболочки.
Старые оболочки выполняют это другим способом.
В некоторых оболочках при перенаправлении ввода выполняется цикл while, а в других -
, в то время как
является не командой shell builtin, а частью синтаксиса оболочки.
Вывод: Не пытайтесь анализировать родительские отношения детей в сложных командах оболочки, если вы не являетесь автором этой оболочки и не хотите проверить, работают ли вещи путь они предназначены в настоящее время в этой конкретной оболочке.
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete
Это находит все файлы в каталоге /home/_backups/pokebrawl
, которые не были изменены за последние +6
дней, и удаляет их. ПРИМЕЧАНИЕ:+6
соответствует 7 дням.
Посмотрите man find
, чтобы узнать, как работают эти переключатели.:
$ man find
...
-mtime n
File's data was last modified n*24 hours ago. See the comments
for -atime to understand how rounding affects the interpretation
of file modification times.
В дистрибутивах Redhat вы можете просто поместить этот скрипт в каталог /etc/crondaily
, и он будет запускаться каждый день. Вы можете видеть, что там уже есть другие скрипты, которые вы можете использовать в качестве примеров:
$ sudo ls -l /etc/cron.daily/
total 12
-rwx------. 1 root root 219 Aug 1 2017 logrotate
-rwxr-xr-x. 1 root root 618 Mar 17 2014 man-db.cron
-rwx------. 1 root root 208 Nov 4 2016 mlocate
Команда find
удалит любой обычный файл в каталоге /home/_backups/pokebrawl
или ниже, который старше семи дней (или, точнее, не изменялся в течение последней недели ).
Следует вероятно читать
find "$DESDIR" -mtime +6 -type f -delete
или
find "${DESDIR:?Not set correctly}" -mtime +6 -type f -delete
, так как уже существует отличная переменная, содержащая это имя каталога. Второй вариант вызовет ошибку, если DESDIR
по какой-либо причине будет пустым или неустановленным.
Я предполагаю, что это способ сохранить резервные копии только за последнюю неделю. Я бы предложил вместо этого использовать что-то вроде borgbackup
или restic
, так как они смогут хранить резервные копии намного дольше, не занимая много места (даже ежечасные резервные копии в течение года вообще не займут много места, если данные не сильно изменились ). Они выполняют дедупликацию данных и borgbackup
дополнительно поддерживают сжатие (, а также поддерживают удаленное резервное копирование и шифрование ).
Чтобы запускать скрипт каждые 24 часа (в полночь ), используйте задание cron.
Сначала введите команду crontab -e
. Это откроет редактор с текущим crontab для активного пользователя (это может быть или не быть пустым файлом ).
Затем добавьте
@daily /path/to/the/script.sh
(где path/to/the/script.sh
— путь к скрипту ).
Сохраните и выйдите из редактора.
Сценарий теперь будет вызываться в полночь, даже ночью.
Если вы хотите запускать скрипт, скажем, в 13 :30 каждый день, добавьте вместо этого следующую запись в crontab:
30 13 * * * /path/to/the/script.sh
Подробную информацию о том, как составить расписание crontab, см. в руководстве по crontab для вашей системы.(man 5 crontab
).