
Ubuntu日本語フォーラム
ログインしていません。
自作プログラムをデーモンとして起動したいのですが,期待通りの結果を得られません.
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;
}
オフライン
loopをデーモン実行してる時のカレントディレクトリって一体どこなんでしょうね?
その辺を考えればわかるような・・・
status) status_of_proc -p $PIDFILE $DAEMON $DAEMON_NAME && exit 0 || exit$?
最後の exit$? は exit $? の間違いでは?
オフライン
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
と無理やり起動させてみても無駄でした.
もう手詰まりなので,助けてください.....
オフライン
なんどもすみません.
https://forums.ubuntulinux.jp/viewtopic.php?pid=67509#p67509
同サイトですが,違うカテゴリで答えがみつかりました.
マルチポストのような振る舞いをしてすみませんでした.
オフライン