お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2010-09-05 23:33:33

koachi
メンバ
登録日: 2008-05-03

netwalkerの自作デーモン

自作プログラムをデーモンとして起動したいのですが,期待通りの結果を得られません.
loop.cはsample.txtをカレントディレクトリに作成し1,2,3・・・・と10秒置きに書き込むプログラムです.

$ sudo update-rc.d autorun defaults 99 # autorunは/etc/init.dにコピー済

このように登録しました.

再起動して,プロセスをみると

* loop is running

でした.

このとき,カレントディレクトリにはsample.txtはありませんでした.

端末上で,

$ ./loop &

とすると,期待通りsample.txtが作成され期待通りの動作でした.

もしかして,netwalkerは自作デーモンを起動できない仕様になっているのでしょうか?

あと,追加の質問で申し訳ないんですが,

プロセスが止まってる状態で

$ sudo /etc/init.d/autorun status
* loop is not running
/etc/init.d/btd: 51: exit1: not found

これはなにか文法的に間違ってるということでしょうか?

よろしくおねがいします.


---- autorun ----
#!/bin/sh
# chkconfig: 2345 91 91
# description: bluetooth daemon script.

. /lib/lsb/init-functions

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/home/foofoo/Desktop/release/loop
DAEMON_NAME=`basename $DAEMON`
PIDFILE="/var/run/autorun.pid"

set -e

start() {

  if start-stop-daemon --stop --quiet --pidfile ${PIDFILE} --signal 0
    then
      echo " already running."
      exit
  fi
  start-stop-daemon --start --pidfile ${PIDFILE} --make-pidfile --quiet --background --exec ${DAEMON}
}

stop() {

  start-stop-daemon --stop --pidfile ${PIDFILE}
}

case "$1" in
  start)
    echo -n "Starting $DAEMON_NAME:"
    start
    ;;
  stop)
    echo -n "Stopping $DAEMON_NAME:"
    stop
    ;;
  restart)
    echo -n "Restarting $DAEMON_NAME:"
    stop
    start
    ;;
  status)
    status_of_proc -p $PIDFILE $DAEMON $DAEMON_NAME && exit 0 || exit$?
    ;;
  *)
    echo $"Usage: $DAEMONNAME {start|stop|restart|status}" >&2
    exit 1
    ;;
esac
exit 0


---- loop.c ----

#include <stdio.h>

int main(void) {

    FILE *fp;
    int i = 0;

    while(1) {

        fp = fopen("sample.txt", "a");

        fprintf(fp, "%d\n", i);
        i++;

        fclose(fp);
        sleep(10);
    }

    return 0;
}

オフライン

 

#2 2010-09-06 00:25:34

gontomo
メンバ
From: 北海道
登録日: 2010-02-17

Re: netwalkerの自作デーモン

loopをデーモン実行してる時のカレントディレクトリって一体どこなんでしょうね?
その辺を考えればわかるような・・・

コード:

  status)
    status_of_proc -p $PIDFILE $DAEMON $DAEMON_NAME && exit 0 || exit$?

最後の exit$? は exit $? の間違いでは?

オフライン

 

#3 2010-09-06 01:08:34

koachi
メンバ
登録日: 2008-05-03

Re: netwalkerの自作デーモン

gontomo による投稿:

loopをデーモン実行してる時のカレントディレクトリって一体どこなんでしょうね?
その辺を考えればわかるような・・・

コード:

  status)
    status_of_proc -p $PIDFILE $DAEMON $DAEMON_NAME && exit 0 || exit$?

最後の exit$? は exit $? の間違いでは?

sample.txtの保存先を実行ファイルのあるディレクトリに作成するようプログラムを変えたら
ファイルの作成が確認できました.
#/etc/init.dにsample.txtはなかったんですが,実際にどこにあったのでしょうか?

スペースがなかったんですね,修正したら直りましたありがとうございます.

何度も申し訳ないのですが,これと似た状況になってまして
カテゴリをまたいで質問スレのURLを貼ることになるのですが,

https://forums.ubuntulinux.jp/viewtopic.php?id=9324

上記のURLでのシェルスクリプトは現在,このスレでのシェルスクリプトに変えてあります
#いろいろとバグがあったので.

あと,ランレベルの設定は同じように

$ sudo update-rc.d autorun defaults 99

としました.

こちらの場合,ファイルの作成にはフルパスで指定して作成しているので
期待通りの場所に作成されるのですが,ファイルは空ファイルでした.
もちろんプロセスは止まっているのですが,OS起動後に

$ sudo /etc/init.d/autorun start

とすると期待通りの動きになります.

シェルスクリプト中に

/etc/init.d/bluetooth start

と無理やり起動させてみても無駄でした.

もう手詰まりなので,助けてください.....

オフライン

 

#4 2010-09-06 16:42:03

koachi
メンバ
登録日: 2008-05-03

Re: netwalkerの自作デーモン

なんどもすみません.

https://forums.ubuntulinux.jp/viewtopic.php?pid=67509#p67509

同サイトですが,違うカテゴリで答えがみつかりました.
マルチポストのような振る舞いをしてすみませんでした.

オフライン

 

Board footer

Powered by FluxBB