雑記

2000|01|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|
2007|01|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|09|11|
2009|02|03|05|06|07|08|10|11|12|
2010|01|03|04|05|06|07|08|09|10|
2011|05|06|09|10|
2012|03|07|09|12|
2013|01|02|04|05|07|08|10|11|
2014|04|05|08|10|12|
2015|01|05|
2016|09|

2009-05-26 [長年日記]

[FreeBSD] プログラムのデーモン化とrcスクリプト

某shibdがshibdとか名乗ってるくせにデーモンになってませんでした。

最初にもらったrcスクリプト:

#!/bin/sh
#
# PROVIDE: shibd
# REQUIRE: LOGIN

shibd_enable="${shibd_enable:-"NO"}"
shibd_flags="${shibd_flags:-""}"

. /etc/rc.subr

name='shibd'
rcvar=`set_rcvar`
load_rc_config "$name"

pidfile=/var/run/shibboleth/${name}.pid
command="/usr/local/sbin/${name}"
command_args="-f -p ${pidfile} &"

run_rc_command "$1"

このスクリプト、厄介なことにログインしてのテストでは問題ないのにOSの起動時には立ち上がりません。最初'&'を見逃していて見当違いなPATHやldconfigを一生懸命修正してました。で、どうやっても解決しないので、やっと気付いてデーモン化に着手。

修正後のスクリプト:

#!/bin/sh
#
# PROVIDE: shibd
# REQUIRE: LOGIN

shibd_enable="${shibd_enable:-"NO"}"
shibd_flags="${shibd_flags:-""}"

. /etc/rc.subr

name='shibd'
rcvar=`set_rcvar`
load_rc_config "$name"

pidfile="/var/run/${name}.pid"
command="/usr/sbin/daemon"
procname="/usr/local/sbin/${name}"
command_args="${procname} -f -p ${pidfile}"

run_rc_command "$1"
  • daemon(8)を使ってデーモン化する
  • shibdはargs側に移動しないとエラーになる
  • それだけではstopやstatusを使えなくなるので、procnameを指定する

とやってようやくうまくいきました。