Вы можете использовать параметр -s
zfs receive, который сохранит возобновляемый токен на принимающей стороне в случае сбоя передачи. Это зависит от того, используете ли вы netcat (nc) или SSH.
На машине recv
(только netcat):
nc -l
На машине send
:
Начните с обычного send
:
zfs send -v snapshot | nc
zfs send -v snapshot | ssh ... zfs receive -s -v tank/dataset
Если передача не удалась, перейдите на машину recv
и введите:
zfs get all tank/dataset
Получите receive_resume_token
и перейдите на машину send
:
zfs send -v -t
zfs send -v -t <токен> | ssh ... zfs receive -s -v tank/dataset
Вот так :)
Вы можете запустить команду в фоновом режиме, а затем заснуть на 5 секунд на переднем плане и затем убить фоновую команду.
Запустите команду в фоновом режиме:
command &
Сохраните PID команды в переменной:
command_pid=$!
Засыпаем на 5 секунд:
sleep 5
Убить фоновый процесс:
kill "$command_pid"
Теперь вы можете добавить паузу, поместить все в цикл и т.д.
Loop:
for ((i=0; i<1000; i++)); do
crunch 7 7 abcdefghijklm &
command_pid=$!
sleep 5
kill "$command_pid"
sleep 5 #pause
done
Предполагая, что timeout(1)
доступен, команда shell
timeout 5s whateverthatcommandis; sleep 99
должна убить программу через пять секунд (предполагая, что программа хорошо себя ведет...), а затем sleep
на любое количество xx секунд. Затем эти команды могут быть завернуты в какой-нибудь цикл по мере необходимости; при условии наличия seq
(на BSD вместо этого можно использовать jot
) типичный цикл может выглядеть так:
for n in `seq 1 1000`; do timeout 5s whateverthatcommandis; sleep 99; done
Цикл shell, кстати, может быть несколько более разборчивым в ZSH:
repeat 1000 { timeout 5s whateverthatcommandis; sleep 99 }