如何添加无限的nc(netcat-openbsd)作业作为运行@restart的crontab -e命令?

时间:2014-01-06 20:50:49

标签: linux ubuntu cron netcat

以下在默认的ubuntu终端中工作正常:

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

我使用该命令使一台计算机连接到远程服务器并坐在那里收听远程服务器发送给它的信息。时间长度是无限的,每隔几秒就会将行添加到日志中。

但是当我尝试将此命令添加为crontab -e的cron作业时,它就不起作用了!

(我真的希望cron启动命令@restart

我已经在某种程度上解决了这个问题:

似乎连接最初已建立,但随后立即关闭。

当我向命令添加"-q 60"时:

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

cronjob实际上确实打开了连接并按指定侦听了60秒(yay!),但当我将其更改为"-q -1"时,指定无限时间段,连接马上关闭(嘘!)。

手册页明确指出-q:    "在stdin EOF 之后的-q,等待指定的秒数,然后退出。如果秒是负数,则永远等待。"

我认为此问题可能与-q选项的默认行为有关,因为我在此处找到了相关的错误报告/修复:

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

其中问题可能是针对有提示的终端解决的,但也许不适用于没有提示的终端?

这可能也是一个独立的问题,只是将负值传递给nc -q选项。

另一种可能性是它甚至可能与cron shell有关,但是,我尝试过的其他测试似乎表明 cron(sh)ell 正在按预期工作。

注意,我在定义crontab命令,(env -i sh;bash;以及采购各种.bashrc文件时尝试使用各种shell和环境组合。设置{{1确保默认$PS1文件中的第5行在文件完全来源之前不会返回。)。

我正在运行: Ubuntu版本12.04.3 LTS
发布: 12.04 netcat-openbsd: 1.89-4ubuntu1

所以我的问题是: 为什么在这种情况下添加.bashrc不起作用? 和

我还有什么其他选择来完成这项任务?

1 个答案:

答案 0 :(得分:1)

尝试添加' -d' netcat的选项:

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

它对我有用。 根据手册页,-d标志是"不要尝试从标准输入读取。"