- PR -

起動スクリプトが「OK」でずに。。。

1
投稿者投稿内容
sarika
会議室デビュー日: 2004/12/15
投稿数: 5
投稿日時: 2004-12-17 11:41
お世話になります。
私は、初めて起動スクリプトを書くのですが、スクリプトのスタートを実行すると、その後に「OK」が出ずにずっと待つ状態みたいになっています。前のスレッドを参考したが解決できません。分かる方がいらしゃったら、教えてください。ちなみに私が書いたスクリプトは以下のとおりです。script fileは、/ect/rc.d/init.dの下に置いてあります。そして、iserverは、メッセージを受けて、大文字に変換して送り返すだけのサーバです。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;
}

よろしくお願いします。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-12-17 13:22
/var/lock/subsys の下に iserver っちゅぅファイルはできておるかね?
start() 中の

daemon $SERVER
RETVAL=$?

この部分で、ちゃんと戻り値 RETVAL は取れておるかね?
sarika
会議室デビュー日: 2004/12/15
投稿数: 5
投稿日時: 2004-12-20 11:07
「OK」が出ました。本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)