sshpass с sftp не работает из crontab?

Нет, по той простой причине, что существует максимальное числовое значение, которое может иметь PID. Если процесс имеет самый высокий PID, ни один из его потомков не может иметь более высокий PID. Альтернативой тому, чтобы дать ребенку более низкий PID, было бы полное проваливание fork(), что было бы не очень продуктивно.

Идентификаторы PID распределяются по порядку, и после использования старшего из них система переключается на повторное использование (свободных )младших, так что вы можете получить более низкие PID для дочерних элементов и в других случаях.

Максимальный PID по умолчанию в моей системе(/proc/sys/kernel/pid_max)составляет всего 32768, так что нетрудно достичь условия, при котором происходит циклический переход.

$ echo $$
27468
$ bash -c 'echo $$'
1296
$ bash -c 'echo $$'
1297

Если бы ваша система распределяла идентификаторы PID случайным образом (, как это делает OpenBSD ), а не последовательно (, как в Linux ), было бы два варианта. Либо случайный выбор был сделан по всему пространству возможных PID, и в этом случае было бы очевидно, что PID ребенка может быть ниже, чем PID родителя. Или дочерний PID будет выбран случайным образом из значений, превышающих PID родителя, что в среднем поместит его посередине между PID родителя и максимальным. Затем рекурсивно разветвляющиеся процессы быстро достигнут максимума, и мы окажемся в той же точке, что и упомянутая выше :: новому форку для успеха потребуется использовать более низкий PID.

-1
08.06.2021, 11:12
1 ответ

Я мог бы заставить это работать следующим образом:

/usr/bin/lftp sftp://user:pass@host -e "set sftp:auto-confirm yes; 
    set net:timeout 10; set net:max-retries 3; mirror -R --max-errors=1 --verbose=1 
   /local/test /remote/test; quit;"

Это синхронизирует все файлы внутри /local/test/с удаленной папкой sftp.

0
28.07.2021, 11:26

Теги

Похожие вопросы