デバイスにリモートでログインし、出力をファイルに保存する機能を設定しようとしています。 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-local
rc.local