デーモンとしてのNetcat

デーモンとしてのNetcat

デバイスにリモートでログインし、出力をファイルに保存する機能を設定しようとしています。 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は他の人が言ったように「STDINを無視」ではなくCentOS 7で遅延設定のようです。

答え1

体系化されたサービスを作成することは私にとって効果的でした。 --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悪い考えです。そして、initスクリプトを終了するにはncバックグラウンドで実行する必要があります。

だから私はあなたが置くことを提案します

nohup nc <host> <port> > /home/you/log.txt &

起動時に実行されていることを確認rc.localしてください。sudo systemctl edit --full rc-localrc.local

関連情報