initデーモンがTTYからエコーされるのを防ぎます。

initデーモンがTTYからエコーされるのを防ぎます。

init以下は、デーモンを起動/停止するスクリプトです。残念ながら、デーモンは/home/nuthan/program/serverクライアントからのTCPパケットをソケットから受信するPerlで書かれたソケットサーバーである解析されたパケットデータ(から)を印刷しています。

サービスを開始すると、解析されたデータ(printステートメントで/home/nuthan/program/server)が私のTTYにエコーされます。また、ターミナルを終了しようとするとデーモンが終了します。この問題をどのように克服できますか?

デーモンとロギングパケットデータコマンド

 daemon -18 perl /home/nuthan/program/server -d -v -r -f -O=/var/log/vts.log --daemon

#!/bin/bash
#
# vts      Start/Stop Vts.
#
# description: VTS daemon for vehicle Tracking.
# Source function library
. /etc/init.d/functions

# Get network config
. /etc/sysconfig/network

RETVAL=0

start() {
echo -n $"Starting vts: "
# Start me up!
daemon -18 perl /home/nuthan/program/server -d -v -r -f -O=/var/log/vts.log --daemon
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/vts
    touch /var/lock/subsys/vts
return $RETVAL

}

stop() {
echo -n $"Stopping vts: "
killproc vts
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/vtsdaemon
return $RETVAL
}

restart() {
  stop
start
}

reload() {
stop
start
}

case "$1" in
  start)
  start
;;
  stop)
  stop
;;
  status)
status vts
;;
  restart)
  restart
;;
  condrestart)
  [ -f /var/lock/subsys/vts ] && restart || :
;;
  reload)
reload
;;
  *)
echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
exit 1
esac

exit 0

ベストアンサー1

3つのコマンドを混ぜています。deamonperlそして/home/nuthan/program/server引用符なし。次の点を考慮してください。どのパラメータを解釈する必要があるかは、それぞれどうすればわかりますか?

使用する構文は、次の場合にのみ正しく解釈できます。

  • deamon-18それ以降のすべてを実行コマンドとして処理します。
  • perl最初の引数(/home/nuthan/program/server)のみを実行するスクリプトとして解釈され、その後のすべての引数は渡された引数として解釈されます。そのスクリプトに

問題を解決するために2つのことを提案できます。

  1. perl明示的な呼び出しが必要であることを確認してください。serverスクリプトの最初の行に正しいインタプリタ宣言が含まれており(可能/usr/bin/perl)、実行可能ビットが設定されている場合は、明示的な呼び出しは必要ありませんperl
  2. コマンド構文を確認してくださいdaemon-18コマンドは、それ以降のすべてが実行される完全なコマンドと見なされるべきであることを示していれば大丈夫です。それ以外の場合は、次のすべての項目を引用符で囲むか、追加の引用符を作成する必要があります。機能またはラッパースクリプトdaemon -18 your_functionこれでコマンド全体が実行されます。したがって、作成したコマンドライン全体がまたはに変わりますdaemon -18 /path/to/your/wrapper_script.sh

おすすめ記事