2

netcat を使用して TCP ポートをリッスンしています。カンマ区切りのデータを 5 分ごとに受信し、テキスト ファイルに書き込んでいます。これが私が実行しているコマンドです:

nc -dl 12.34.56.78 1234 > path/to/my/file & echo $!

このコマンドをコマンドラインから実行すると、データがファイルに保存され、すべて問題ありません。

ただし、何らかの理由でプロセスが停止した場合に netcat リスナーを復元する小さな PHP スクリプトを (上記と同じコマンドを使用して) 作成しました。スクリプトは、cron ジョブを介して実行されます。この場合、データは引き続きファイルに書き込まれますが、常に "^@" 文字の文字列が先頭に追加され、その長さは毎回 (5 分ごとに) 増加します。

なぜこれが起こっているのか、そしてそれを止める方法についての洞察は大歓迎です!

マット。

4

1 に答える 1

1

cronで実行する場合、環境が異なる可能性があります。

正確なパスを修飾してみてください

/usr/bin/nc -dl 12.34.56.78 1234 > /absolute/path/to/my/file & echo $!

また、netcat には 2 つの「競合する」一般的なバージョンがあることに注意してください。

  • netcat-伝統的な
  • netcat-openbsd

コマンドラインオプションが若干異なる

また、物事をループにすることも検討してください。

#!/bin/sh
exec < /dev/null > /dev/null

while true
do
     nc -dl 12.34.56.78 1234
done
于 2013-07-23T17:49:48.800 に答える