service doen't get started at boottime, but can start manually
Mike Clarke
jmc-freebsd2 at milibyte.co.uk
Sun Sep 7 17:00:35 UTC 2014
On Sunday 07 Sep 2014 09:53:51 Scot Hetzel wrote:
> The scripts in 3-6, and 8 are wrong. According to /etc/rc.subr, the
> '# PROVIDE: ' is mandatory to detect a rc script:
Well it appears that they are only half wrong.
Scripts without PROVIDE will work if they're in /etc/rc.d but not if
in /usr/local/etc/rc.d. I have run a test case to confirm this.
In /etc/rc we have:
95 # Do a first pass to get everything up to $early_late_divider so
that
96 # we can do a second pass that includes $local_startup directories
97 #
98 files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* 2>/dev/null`
99
100 _rc_elem_done=' '
101 for _rc_elem in ${files}; do
102 run_rc_script ${_rc_elem} ${_boot}
103 _rc_elem_done="${_rc_elem_done}${_rc_elem} "
104
105 case "$_rc_elem" in
106 */${early_late_divider}) break ;;
107 esac
108 done
109
110 unset files local_rc
111
112 # Now that disks are mounted, for each dir in $local_startup
113 # search for init scripts that use the new rc.d semantics.
114 #
115 case ${local_startup} in
116 [Nn][Oo] | '') ;;
117 *) find_local_scripts_new ;;
118 esac
119
120 # The firstboot sentinel might be on a newly mounted filesystem;
look for it
121 # again and unset skip_firstboot if we find it.
122 if [ -e ${firstboot_sentinel} ]; then
123 skip_firstboot=""
124 fi
125
126 files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* ${local_rc}
2>/dev/null`
127 for _rc_elem in ${files}; do
128 case "$_rc_elem_done" in
129 *" $_rc_elem "*) continue ;;
130 esac
131
132 run_rc_script ${_rc_elem} ${_boot}
133 done
So all files in /etc/rd.d are potential startup scripts but those in
/usr/local/etc must meet the requirement of having a PROVIDE line.
This inconsistency isn't mentioned anywhere in the examples in
<https://www.freebsd.org/doc/en/articles/rc-scripting/index.html> so
it looks like either the documentation needs this adding or perhaps
the test for PROVIDE in find_local_scripts_new() should be replaced by
a test for defining the variable "name" (which is mandatory) or
perhaps there's no longer any need to apply this test?
--
Mike Clarke
More information about the freebsd-ports
mailing list