Как добавить бесконечное задание 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: "Не пытаться читать со стандартного ввода".