我正在尝试设置一些可以远程登录到设备并将输出保存到文件的东西。我可以让它在 CLI 上运行,但不能在启动时运行它(使用 crontab)
这可以在命令行上运行:
$ nc <host> <port> | tee -a ~/log.txt
挑战在于使用 cron 在系统启动时运行它。 nc 本身不会作为 cron 运行,因此我在 screen -d -m 中运行它并且它保持打开状态。
screen -d -m nc <host> <port> | tee -a ~/log.txt
但该文件没有输出。我也尝试过:
screen -d -m nc <host> <port> 2>&1 | tee -a ~/log.txt
仍然没有任何内容输出到文件...我看到有些人推荐在 nc 上使用 -d 标签,但 -d 似乎是 CentOS 7 上的延迟设置,而不是像其他人所说的那样“忽略 STDIN”。
答案1
创建一个 systemd 服务对我有用。当我没有 --recv-only 标签时,nc 将立即关闭。这似乎让它按预期运行。
[Unit]
Description=test
[Service]
ExecStart=/bin/sh -c 'nc -t --recv-only 10.215.83.80 3004 >> /home/hursjohn/log.txt'
[Install]
WantedBy=multi-user.target
答案2
你的问题中有一些难以理解的地方。
使用 cron 让它在系统启动时运行
如果你想在启动时运行,你要么用 systemd 做一些魔法(对于 Redhat 及其追随者;Centos 从 vs 7 开始就屈服了),或者你把它放在 rc.local 中(对于 Unix 或类 Unix 系统)。如果您将其放入 cron(或更准确地说:crontab)中,它将定期运行。
我也不明白你为什么要换nc
行screen
命令。虽然也许有可能,但这似乎是不必要的矫枉过正。
如果您想在系统启动时运行,通常没有可用的标准输出,所以这tee
也是一个坏主意。而且,如果您想退出初始化脚本,您将需要nc
在后台运行。
所以,我建议你把
nohup nc <host> <port> > /home/you/log.txt &
并rc.local
检查sudo systemctl edit --full rc-local
是否rc.local
在启动时运行。