Как добавить бесконечное задание nc (netcat-openbsd) в качестве команды crontab -e для запуска @restart?

Следующее прекрасно работает с терминала Ubuntu по умолчанию:

    nc -P ANONYMOUS 10.0.1.2 7700 >> ~/some.log

Я использую эту команду, чтобы один компьютер подключился к удаленному серверу и сидел там, слушая информацию, отправляемую ему удаленным сервером. Продолжительность времени бесконечна, и строки добавляются в журнал каждые несколько секунд.

Но как только я пытаюсь добавить эту команду в качестве задания cron с crontab -e, это не работает!

(Я действительно хочу, чтобы cron запустил команду @restart)

Я выделил проблему несколько:

Похоже, что соединение изначально устанавливается, но затем немедленно закрывается.

Когда я добавлю "-q 60" в команду:

 nc -q 60 -P ANONYMOUS 10.0.1.2 7700 >> ~/some.log

cronjob фактически открывает соединение и слушает, в течение 60 секунд, как указано (yay!), но когда я изменяю это на "-q -1", чтобы указать бесконечный период времени, соединение закрывается немедленно (бу!).

Страница man явно заявляет для -q: " -q после EOF вкл stdin, подождите указанное количество секунд и выйдите. Если секунды отрицательны, ждите вечно."

Я считаю, что эта проблема может иметь отношение к поведению по умолчанию -q вариант, как я нашел сообщение об ошибке / исправить здесь:

 https://bugs.launchpad.net/ubuntu/+source/netcat-openbsd/+bug/544935 

в котором проблема могла быть решена для терминалов с подсказкой, но, возможно, не для терминалов без подсказки?

Это также может быть независимой проблемой, связанной только с передачей отрицательного значения nc -q вариант.

Другая возможность состоит в том, что это может быть даже связано с оболочкой cron, однако другие тесты, которые я пробовал, по-видимому, указывают на то, что cron (sh)ell работает, как ожидалось.

Обратите внимание, я пытался использовать различные комбинации оболочек и сред при определении crontab команда, (env -i sh; а также bash; и поиск различных .bashrc файлы. настройка $PS1 чтобы обеспечить строку 5 по умолчанию .bashrc файл не возвращается, пока файл полностью не получен.).

Я работаю: Ubuntu версия 12.04.3 LTS
Релиз: 12.04 netcat-openbsd: 1.89-4ubuntu1

Итак, мои вопросы таковы: почему добавление "-q -1" не работает в этом случае? а также:

Какие еще альтернативы у меня есть для выполнения этой задачи?

1 ответ

Попробуйте добавить опцию '-d' в netcat:

nc -d -q -1 -P ANONYMOUS 10.0.1.2 7700 >> ~/some.log

Это сработало для меня. Согласно man-странице флаг -d: "Не пытаться читать со стандартного ввода".

Другие вопросы по тегам