- - PR -
起動スクリプトが「OK」でずに。。。
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-12-17 10:29
お世話になります。
私は、初めて起動スクリプトを書くのですが、スクリプトのスタートを実行すると、その後に「OK」が出ずにずっと待つ状態みたいになっています。前のスレッドを参考したが解決できません。分かる方がいらしゃったら、教えてください。ちなみに私が書いたスクリプトは以下のとおりです。script fileは、/ect/rc.d/init.dの下に置いてあります。そして、iserverは、メッセージを受けて、大文字に変換して送り返すだけのサーバです。 #!/bin/bash # Source function library if [ -f /etc/init.d/functions ]; then . /etc/init.d/functions elif [ -f /etc/rc.d/init.d/functions ] ; then . /etc/rc.d/init.d/functions else exit 0 fi # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. if [ ${NETWORKING} = "no" ] then exit 0 fi # Path to the server SERVER=/usr/app/iserver # Check that server path is correct [ -f $SERVER ] || exit 1 prog=iserver RETVAL=0 # Functions start() { echo -n $"Starting $prog: " daemon $SERVER RETVAL=$? [ $RETVAL -ne 0 ] && failure [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog && success echo return $RETVAL } stop() { echo -n $"Stopping $prog: " killproc $SERVER RETVAL=$? echo [ $RETVAL = 0 ] && rm -f /var/lock/subsys/$prog } reload() { echo -n $"Reloading $prog: " killproc $SERVER -HUP RETVAL=$? echo } # See how we were called. case "$1" in start) start ;; stop) stop ;; status) status $SERVER RETVAL=$? ;; restart) stop start ;; reload) reload ;; *) echo $"Usage: $prog {start|stop|restart|reload|status}" exit 1 esac exit $RETVAL --------------------------------------------------------- ・iserver のコード #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <netinet/in.h> #define PORT 8765 #define BACKLOG 5 int main(void){ int i; int nameLen; int servSocket,clntSocket; struct sockaddr_in saddr; struct sockaddr_in caddr; char buf[1024]; int len,ret; servSocket=socket(PF_INET,SOCK_STREAM,0); if(servSocket<0){ perror("socket"); EXIT_FAILURE; } bzero((char *)&saddr,sizeof(saddr)); saddr.sin_family=AF_INET; saddr.sin_addr.s_addr=INADDR_ANY; saddr.sin_port=htons(PORT); if(bind(servSocket,(struct sockaddr *)&saddr,sizeof(saddr))<0){ perror("bind"); EXIT_FAILURE; } if(listen(servSocket,BACKLOG)<0){ perror("listen"); EXIT_FAILURE; } len=sizeof(caddr); clntSocket=accept(servSocket,(struct sockaddr *)&caddr,&len); if(clntSocket<0){ perror("accept"); EXIT_FAILURE; } close(servSocket); ret=read(clntSocket,buf,1024); printf("受信:%s",buf); while(strcmp(buf,"quit\\\\n")!=0){ for(i=0;i<ret;i++){ if(isalpha(buf[i]))buf[i]=toupper(buf[i]); } write(clntSocket,buf,1024); printf("送信:%s\\\\n",buf); ret=read(clntSocket,buf,1024); printf("受信:%s",buf); } close(clntSocket); return EXIT_SUCCESS; } よろしくお願いします。 |
|
投稿日時: 2004-12-17 11:17
まずご質問内容ですが、Insider .NET ではなく UNIX 系 OS (Linux?) での問題に見えます。
これが正しければ適切な会議室に移動をお願いします。 本題に入ります。 ブート用スクリプトを書かれているので C プログラムが文字変換サービスを提供するデーモンとして動作することを期待していると思われますが、提示された C プログラムはデーモンとしての要件を満たしていません。 現象としては、通常プログラムをブートスクリプトから呼び出しており、それがクライアントからの受信を待ったまま終了しないため、スクリプト全体も終了しないと考えられます。 デーモンプロセスを作成されるのであれば、それなりの勉強を積むようお願いします。 検索キーワードとしては、デーモンプロセス、fork、exec、あたりで検索すると、適切なサイトが見つかるようです。(実際に試してみました) |
|
投稿日時: 2004-12-17 11:36
Gioさん、ご返答ありがとうございました。勉強不足で、本当にすみません。
|
|
投稿日時: 2004-12-17 11:44
このスレッドをLinux系に移動します。すみません。
|
|
投稿日時: 2004-12-17 13:21
/var/lock/subsys の下に iserver っちゅぅファイルはできておるかね?
start() 中の daemon $SERVER RETVAL=$? この部分で、ちゃんと戻り値 RETVAL は取れておるかね? |
1