Я должен копировать файлы на машине. И данные очень велики. Теперь серверы должны работать в обычном режиме, и на них обычно есть определенный диапазон часов работы. Так есть ли способ выполнить такие команды таким образом, что если сервер попадает в часы занятости, он приостанавливает процесс, а когда выходит из этого диапазона, возобновляет его?
Предназначенный-Result
cp src dst
if time between 9:00-14:00 pause process
After 14:00 resume cp command.
process
process-management
Sollosa
источник
источник
cp -al
ферму с жесткими ссылками? Или использовать файловую систему, которая поддерживает ссылки на уровне блоков с копированием при записи, используяcp -a --reflink=auto
? BTRFS и ZFS поддерживают это для копий в пределах одного физического устройства.src
с 9:00 до 14:00? Если это так, простая приостановка и возобновлениеcp
процесса может привести к повреждению файлов. Может быть, лучше запуститьrsync
в сочетании сtimeout
командой.Ответы:
Да нужно
Затем процесс отобразится со статусом «T» (PS). Чтобы продолжить делать
Удачи!
источник
Вы можете приостановить выполнение процесса, отправив ему сигнал SIGSTOP, а затем возобновить его, отправив сигнал SIGCONT.
Предполагая, что ваша рабочая нагрузка - это отдельный процесс (не работает помощник, работающий в фоновом режиме), вы можете использовать что-то вроде этого:
Затем, когда начинается занятое время, отправьте SIGSTOP:
Позже, когда сервер снова простаивает, возобновите его.
Вам нужно будет запланировать это на определенное время, когда вы хотите, чтобы оно выполнялось, вы можете использовать такие инструменты, как таймеры cron или systemd (или множество других подобных инструментов), чтобы получить это расписание. Вместо планирования на основе временного интервала вы можете контролировать сервер (возможно, просматривая среднюю нагрузку, использование процессора или активность из журналов сервера), чтобы принять решение о том, когда следует приостановить / возобновить копирование.
Вам также необходимо управлять PID-файлом (если вы его используете), убедитесь, что ваша копия на самом деле все еще работает, прежде чем ее приостановить, возможно, вы захотите очистить ее, удалив pid-файл после завершения копирования и т. Д.
Другими словами, вам нужно больше об этом, чтобы сделать надежным, но основная идея использования этих сигналов SIGSTOP и SIGCONT для приостановки / возобновления выполнения процесса, похоже, то, что вы ищете.
источник
Вместо того, чтобы приостанавливать процесс, вы также можете придать ему более низкий приоритет:
придаст ему наименьший приоритет (наивысшую точность), чтобы процесс уступал ЦП другим процессам, которые в большинстве случаев нуждаются в нем.
В Linux то же самое можно сделать с помощью ввода / вывода с помощью
ionice
:Поместит процесс в класс «бездействия», чтобы он получал время на диске только тогда, когда ни одна другая программа не запрашивала дисковый ввод-вывод в течение определенного льготного периода .
источник
Используйте rsync, забудьте про cp для этого сценария. Есть параметры для ограничения полосы пропускания, или они могут быть убиты / остановлены и запущены позже, таким образом, это будет продолжаться, где он оставил google rsync example / s
источник
Если вы собираетесь сделать это, прервав запущенный процесс, я предлагаю поиграть с программой Screen. Некоторое время я не пользовался Linux, но IIRC, просто приостановив команду и возобновив ее позже, оставляет вас довольно уязвимыми, если вы случайно выйдете из системы, вы не сможете возобновить сеанс.
С экраном я думаю, что вы можете прервать сеанс, затем отсоединить его и выйти из системы. Позже вы можете вернуться и снова присоединиться к этому сеансу. Вы должны немного поиграть с ним, но это сделало сессии намного более надежными.
Вы также можете выйти из системы и вернуться домой, затем войти удаленно, подключиться к системе, которую вы запустили в офисе, и возобновить ее на вечер, а затем снова забрать на следующий день на работе.
источник
Если ваша оболочка поддерживает это (почти все), вы можете нажать ^ Z (Ctrl + Z), чтобы легко отправить
SIGTSTP
сигнал на задание переднего плана, а затем продолжить его сfg
(на переднем плане) илиbg
(на заднем плане).Если вы делаете это для нескольких задач и хотите вернуться к ним позже, вы можете использовать
jobs
команду, а затем вернуться с помощьюfg/bg %#
, где # - это число, указанное в скобках для заданий.Имейте в виду, что
SIGTSTP
это немного отличается отSIGSTOP
(который используется во всех других ответах), что наиболее важно из-за того, что его можно игнорировать (но я не видел, чтобы программа игнорировала его, кромеsl
). Более подробную информацию можно найти в этом ответе на StackOverflow .источник