summaryrefslogtreecommitdiff
path: root/astro/setiathome/files
diff options
context:
space:
mode:
authorDirk Meyer <dinoex@FreeBSD.org>2003-06-01 05:45:34 +0000
committerDirk Meyer <dinoex@FreeBSD.org>2003-06-01 05:45:34 +0000
commit044a2ff8cf2fd5f4864a3e696d549a7570d607d9 (patch)
tree279a3ec4d9ff546ca3ca7afbcd6a95c992ea2dd7 /astro/setiathome/files
parent- Update to 1.1.0 (diff)
version bump to 3.08 w/ the following enhancements :
- only one master shell to monitor multiple setiathome instances - wait some time for setiathome server to come up between restarts - xsetiathome comes back - -graphics is now the default (so xsetiathome may be launched) - registration heuristic changed (see comments below) - take care, some variable names have changed (see comments below) - manual page reviewed The setiathome manual page refer to setiathome.conf while it is now named rc.setiathome.conf. also, the manual page has been completed (variables, start/stop scripts, etc.) - gracefull startup script option added Makefile PORTVERSION bumped PORTREVISION deleted FORBIDDEN deleted BROKEN bumped to 4.0 NO_XBIN deleted except for linux_base-6 wrapper added pkg-install registration heuristic changed (don't register if already registered, then automatically start setiathome in either case) pkg-list $FreeBSD$ added libexec/setiathome.bin added pkg-message FreeBSD 5.x a.out comment changed to FreeBSD 4.x comment files/rc.setiathome.conf seti_std_args defaulted to "-email -graphics" seti_proxy_args changed to seti_proxy_server seti_socks_server, seti_socks_user, seti_socks_passwd added seti_sleep changed to seti_sleep_time files/setiathome.1 /usr/local changed to %%PREFIX%% above and below changes described files/setiathome.sh same changes as files/rc.setiathome.conf don't start setiathome if already started su heuristic changed to call an external wrapper gracefull (aka apachectl :) option added using stop_after_send.txt PR: 50723,51759,52297,52709 Submitted by: cyrille.lefevre@laposte.net
Notes
Notes: svn path=/head/; revision=81858
Diffstat (limited to 'astro/setiathome/files')
-rw-r--r--astro/setiathome/files/rc.setiathome.conf15
-rw-r--r--astro/setiathome/files/setiathome.153
-rw-r--r--astro/setiathome/files/setiathome.bin426
-rw-r--r--astro/setiathome/files/setiathome.sh86
4 files changed, 536 insertions, 44 deletions
diff --git a/astro/setiathome/files/rc.setiathome.conf b/astro/setiathome/files/rc.setiathome.conf
index f7049c5855b2..209917e17e36 100644
--- a/astro/setiathome/files/rc.setiathome.conf
+++ b/astro/setiathome/files/rc.setiathome.conf
@@ -4,11 +4,14 @@
#
# seti_wrkdir=/var/db/${rc_file%.sh} # primary working directory
-# seti_std_args=-email # command arguments for standard mode
-# seti_reg_args=-login # command arguments for register mode
-# seti_proxy_args= # proxy arguments
-# seti_user=setiathome # user id to run as
-# seti_group=${seti_user} # group id to run as
+# seti_std_args="-email -graphics" # startup command line arguments
+# seti_reg_args=-login # command line arguments to register
+# seti_proxy_server= # HTTP proxy server (hostname:port)
+# seti_socks_server= # SOCKS proxy server (hostname:port)
+# seti_socks_user= # SOCKS proxy user name
+# seti_socks_passwd= # SOCKS proxy password
+# seti_user=setiathome # user name to run as
+# seti_group=${seti_user} # group name to run as
# seti_nice=15 # nice level to run at
# seti_maxprocs=$(sysctl -n hw.ncpu) # max. number of processes to start
-# seti_sleep=21600 # time to sleep between restarts
+# seti_sleep_time=21600 # time to sleep between restarts
diff --git a/astro/setiathome/files/setiathome.1 b/astro/setiathome/files/setiathome.1
index 4ac329052633..3ad84bf3fd53 100644
--- a/astro/setiathome/files/setiathome.1
+++ b/astro/setiathome/files/setiathome.1
@@ -118,22 +118,51 @@ This
.Fx
port includes a start-up script that starts
.Nm
-at system start-up.
+at system start-up and stop it at system shut-down.
+.Ss Stopping setiathome
+There is two way to stop
+.Nm ,
+gracefully (See
+.Pa stop_after_send.txt
+mentioned in
+.Sx FILES
+below) and urgently (using kill as done at system shut-down time).
+To do so, respectively run
+.Pp
+.Dl %%PREFIX%%/etc/rc.d/%%PREFX%%setiathome%%SUFX%%.sh gracefull
+or
+.Dl %%PREFIX%%/etc/rc.d/%%PREFX%%setiathome%%SUFX%%.sh stop
.Ss Configuration File
The optional configuration file
-.Pa /usr/local/etc/setiathome.conf
-can contain one or more of the following variable assignments to override
+.Pa %%PREFIX%%/etc/rc.%%PREFX%%setiathome%%SUFX%%.conf
+may contain one or more of the following variable assignments to override
their default values:
.Bl -tag -width seti_wrkdir
.It Pa seti_wrkdir=/var/db/setiathome
The working directory where
.Nm
will store it's temporary files.
-.It Pa seti_user=nobody
+.It Pa seti_std_args=-email and/or -graphics
+The command line arguments for normal start-up.
+.It Pa seti_reg_args=-login
+The command line arguments for registration.
+.It Pa seti_proxy_server=hostname:port
+The HTTP proxy server and port to connect through.
+.It Pa seti_socks_server=hostname:port
+The SOCKS server and port to connect through.
+.It Pa seti_socks_user=username
+The SOCKS user name to connect with.
+.It Pa seti_socks_passwd=password
+The SOCKS password to connect with.
+.It Pa seti_user=setiathome
The user to run
.Nm
as.
-.It Pa seti_nice=1
+.It Pa seti_group=setiathome
+The group to run
+.Nm
+as (only used at registration time).
+.It Pa seti_nice=15
The
.Xr nice 1
value to run
@@ -146,6 +175,10 @@ processes to run concurrently. Defaults to the number of CPUs installed.
Running more than one instance per CPU is not useful, as
.Nm
is almost completely CPU-bound.
+.It Pa seti_sleep_time=21600
+The time to sleep (in seconds) between restarts if the
+.Nm
+data server is unresponsive.
.El
.Pp
If you change values in the configuration file, you need to stop and start
@@ -153,9 +186,9 @@ If you change values in the configuration file, you need to stop and start
and possibly reconfigure the working directory for the changes to take
effect. Run
.Pp
-.Dl /usr/local/etc/rc.d/setiathome.sh stop
-.Dl /usr/local/etc/rc.d/setiathome.sh register
-.Dl /usr/local/etc/rc.d/setiathome.sh start
+.Dl %%PREFIX%%/etc/rc.d/%%PREFX%%setiathome%%SUFX%%.sh stop
+.Dl %%PREFIX%%/etc/rc.d/%%PREFX%%setiathome%%SUFX%%.sh register
+.Dl %%PREFIX%%/etc/rc.d/%%PREFX%%setiathome%%SUFX%%.sh start
.Pp
to do that.
.Ss Setting up setiathome
@@ -210,10 +243,10 @@ will query you.
.El
.Sh FILES
.Bl -tag -width /var/db -compact
-.It Pa /usr/local/etc/rc.d/setiathome.sh
+.It Pa %%PREFIX%%/etc/rc.d/%%PREFX%%setiathome%%SUFX%%.sh
Start-up script.
.Pp
-.It Pa /usr/local/etc/setiathome.conf
+.It Pa %%PREFIX%%/etc/rc.%%PREFX%%setiathome%%SUFX%%.conf
Optional configuration file for the start-up script.
.Pp
.It Pa /var/db/setiathome/
diff --git a/astro/setiathome/files/setiathome.bin b/astro/setiathome/files/setiathome.bin
new file mode 100644
index 000000000000..3aff3acff02b
--- /dev/null
+++ b/astro/setiathome/files/setiathome.bin
@@ -0,0 +1,426 @@
+#!/bin/sh -T
+
+# $FreeBSD$
+
+# Copyright (c) 2003 Cyrille Lefevre. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. The name of the authors and contributors may not be used to
+# endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS
+# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+setistart () { # dir
+ local dir
+ dir=$1
+
+ # goto the startup dir
+ cd ${dir} || return
+
+ # don't start a dying client
+ [ -f stop_after_send.txt ] && return
+
+ # fire up a setiathome client
+ ${program_path} ${program_args} > /dev/null &
+
+ # memorize the startup dir
+ eval pid_$!=${dir}
+ # and the client process ID
+ setipids="${setipids} $!"
+}
+
+setikill () { # SIGTERM handler
+ local pids pid
+
+ # save pids to kill
+ pids="${sleeppid} ${setipids}"
+ # avoid futher setiathome startup
+ unset setipids
+
+ # kill'em all if any
+ for pid in ${pids}; do
+ ps p ${pid} > /dev/null && kill ${pid}
+ done
+}
+
+setirestart () { # SIGCHLD handler
+ local pids pid dir
+
+ # killing in progress
+ [ -n "${setipids}" ] || return
+ # restart in process
+ [ -n "${sleeppids}" ] && return
+
+ # wait for setiathome servers to come up
+ sleep ${seti_sleep_time} &
+
+ # wait even if more than one setiathome client dies
+ sleeppid=$!
+ while ps p ${sleeppid} > /dev/null; do
+ wait ${sleeppid}
+ done
+ unset sleeppid
+
+ # killing while sleeping
+ [ -n "${setipids}" ] || return
+
+ # save pids to restart
+ pids=${setipids}
+ # reset the process ID list
+ unset setipids
+
+ for pid in ${pids}; do
+ if ps p ${pid} > /dev/null; then
+ # still alive
+ setipids="${setipids} ${pid}"
+ else
+ # backup the startup dir
+ eval dir=\${pid_${pid}}
+ # clean the old one
+ unset pid_${pid}
+ # launch the dead client
+ eval setistart ${dir}
+ fi
+ done
+}
+
+if [ -z "${program_path}" ]; then
+ case $0 in
+ /*) rc_dir=${0%/*} ;;
+ *) rc_dir=${PWD:-$(pwd)} ;;
+ esac
+ rc_file=${0##*/}
+ rc_path=${rc_dir}/${rc_file}
+
+ if ! PREFIX=$(expr ${rc_path} : "\(/.*\)/libexec/${rc_file}\$"); then
+ echo "${rc_file}: Cannot determine PREFIX." >&2
+ echo "Please use the complete pathname." >&2
+ exit 64
+ fi
+
+ echo "Don't use this script directly, uses the following one instead :" >&2
+ echo " ${PREFIX}/etc/rc.d/${rc_file%.bin}.sh start" >&2
+ exit 1
+fi
+
+# save this shell process ID
+echo $$ > ${seti_wrkdir}/shpid.sah
+
+# setup handlers
+trap setikill TERM
+trap setirestart CHLD
+
+# startup setiathome client(s)
+for dir in ${seti_wrksuff}; do
+ setistart ${seti_wrkdir}/${dir}
+done
+
+# wait for them until death
+while [ -n "${setipids}" ]; do
+ wait
+done
+#!/bin/sh -T
+
+# $FreeBSD$
+
+# Copyright (c) 2003 Cyrille Lefevre. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. The name of the authors and contributors may not be used to
+# endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS
+# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+setistart () { # dir
+ local dir
+ dir=$1
+
+ # goto the startup dir
+ cd ${dir} || return
+
+ # don't start a dying client
+ [ -f stop_after_send.txt ] && return
+
+ # fire up a setiathome client
+ ${program_path} ${program_args} > /dev/null &
+
+ # memorize the startup dir
+ eval pid_$!=${dir}
+ # and the client process ID
+ setipids="${setipids} $!"
+}
+
+setikill () { # SIGTERM handler
+ local pids pid
+
+ # save pids to kill
+ pids="${sleeppid} ${setipids}"
+ # avoid futher setiathome startup
+ unset setipids
+
+ # kill'em all if any
+ for pid in ${pids}; do
+ ps p ${pid} > /dev/null && kill ${pid}
+ done
+}
+
+setirestart () { # SIGCHLD handler
+ local pids pid dir
+
+ # killing in progress
+ [ -n "${setipids}" ] || return
+ # restart in process
+ [ -n "${sleeppids}" ] && return
+
+ # wait for setiathome servers to come up
+ sleep ${seti_sleep_time} &
+
+ # wait even if more than one setiathome client dies
+ sleeppid=$!
+ while ps p ${sleeppid} > /dev/null; do
+ wait ${sleeppid}
+ done
+ unset sleeppid
+
+ # killing while sleeping
+ [ -n "${setipids}" ] || return
+
+ # save pids to restart
+ pids=${setipids}
+ # reset the process ID list
+ unset setipids
+
+ for pid in ${pids}; do
+ if ps p ${pid} > /dev/null; then
+ # still alive
+ setipids="${setipids} ${pid}"
+ else
+ # backup the startup dir
+ eval dir=\${pid_${pid}}
+ # clean the old one
+ unset pid_${pid}
+ # launch the dead client
+ eval setistart ${dir}
+ fi
+ done
+}
+
+if [ -z "${program_path}" ]; then
+ case $0 in
+ /*) rc_dir=${0%/*} ;;
+ *) rc_dir=${PWD:-$(pwd)} ;;
+ esac
+ rc_file=${0##*/}
+ rc_path=${rc_dir}/${rc_file}
+
+ if ! PREFIX=$(expr ${rc_path} : "\(/.*\)/libexec/${rc_file}\$"); then
+ echo "${rc_file}: Cannot determine PREFIX." >&2
+ echo "Please use the complete pathname." >&2
+ exit 64
+ fi
+
+ echo "Don't use this script directly, uses the following one instead :" >&2
+ echo " ${PREFIX}/etc/rc.d/${rc_file%.bin}.sh start" >&2
+ exit 1
+fi
+
+# save this shell process ID
+echo $$ > ${seti_wrkdir}/shpid.sah
+
+# setup handlers
+trap setikill TERM
+trap setirestart CHLD
+
+# startup setiathome client(s)
+for dir in ${seti_wrksuff}; do
+ setistart ${seti_wrkdir}/${dir}
+done
+
+# wait for them until death
+while [ -n "${setipids}" ]; do
+ wait
+done
+#!/bin/sh -T
+
+# $FreeBSD$
+
+# Copyright (c) 2003 Cyrille Lefevre. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. The name of the authors and contributors may not be used to
+# endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS
+# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+setistart () { # dir
+ local dir
+ dir=$1
+
+ # goto the startup dir
+ cd ${dir} || return
+
+ # don't start a dying client
+ [ -f stop_after_send.txt ] && return
+
+ # fire up a setiathome client
+ ${program_path} ${program_args} > /dev/null &
+
+ # memorize the startup dir
+ eval pid_$!=${dir}
+ # and the client process ID
+ setipids="${setipids} $!"
+}
+
+setikill () { # SIGTERM handler
+ local pids pid
+
+ # save pids to kill
+ pids="${sleeppid} ${setipids}"
+ # avoid futher setiathome startup
+ unset setipids
+
+ # kill'em all if any
+ for pid in ${pids}; do
+ ps p ${pid} > /dev/null && kill ${pid}
+ done
+}
+
+setirestart () { # SIGCHLD handler
+ local pids pid dir
+
+ # killing in progress
+ [ -n "${setipids}" ] || return
+ # restart in process
+ [ -n "${sleeppids}" ] && return
+
+ # wait for setiathome servers to come up
+ sleep ${seti_sleep_time} &
+
+ # wait even if more than one setiathome client dies
+ sleeppid=$!
+ while ps p ${sleeppid} > /dev/null; do
+ wait ${sleeppid}
+ done
+ unset sleeppid
+
+ # killing while sleeping
+ [ -n "${setipids}" ] || return
+
+ # save pids to restart
+ pids=${setipids}
+ # reset the process ID list
+ unset setipids
+
+ for pid in ${pids}; do
+ if ps p ${pid} > /dev/null; then
+ # still alive
+ setipids="${setipids} ${pid}"
+ else
+ # backup the startup dir
+ eval dir=\${pid_${pid}}
+ # clean the old one
+ unset pid_${pid}
+ # launch the dead client
+ eval setistart ${dir}
+ fi
+ done
+}
+
+if [ -z "${program_path}" ]; then
+ case $0 in
+ /*) rc_dir=${0%/*} ;;
+ *) rc_dir=${PWD:-$(pwd)} ;;
+ esac
+ rc_file=${0##*/}
+ rc_path=${rc_dir}/${rc_file}
+
+ if ! PREFIX=$(expr ${rc_path} : "\(/.*\)/libexec/${rc_file}\$"); then
+ echo "${rc_file}: Cannot determine PREFIX." >&2
+ echo "Please use the complete pathname." >&2
+ exit 64
+ fi
+
+ echo "Don't use this script directly, uses the following one instead :" >&2
+ echo " ${PREFIX}/etc/rc.d/${rc_file%.bin}.sh start" >&2
+ exit 1
+fi
+
+# save this shell process ID
+echo $$ > ${seti_wrkdir}/shpid.sah
+
+# setup handlers
+trap setikill TERM
+trap setirestart CHLD
+
+# startup setiathome client(s)
+for dir in ${seti_wrksuff}; do
+ setistart ${seti_wrkdir}/${dir}
+done
+
+# wait for them until death
+while [ -n "${setipids}" ]; do
+ wait
+done
diff --git a/astro/setiathome/files/setiathome.sh b/astro/setiathome/files/setiathome.sh
index 57b4a55d22aa..4e6b7e7fe061 100644
--- a/astro/setiathome/files/setiathome.sh
+++ b/astro/setiathome/files/setiathome.sh
@@ -14,15 +14,20 @@ rc_path=${rc_dir}/${rc_file}
rc_arg=$1
# override these variables in ${PREFIX}/etc/rc.setiathome.conf
+set -a
seti_wrkdir=/var/db/${rc_file%.sh} # primary working directory
-seti_std_args=-email # command arguments for standard mode
-seti_reg_args=-login # command arguments for register mode
-seti_proxy_args= # proxy arguments
-seti_user=setiathome # user id to run as
-seti_group=${seti_user} # group id to run as
+seti_std_args="-email -graphics" # startup command line arguments
+seti_reg_args=-login # command line arguments to register
+seti_proxy_server= # HTTP proxy server (hostname:port)
+seti_socks_server= # SOCKS proxy server (hostname:port)
+seti_socks_user= # SOCKS proxy user name
+seti_socks_passwd= # SOCKS proxy password
+seti_user=setiathome # user name to run as
+seti_group=${seti_user} # group name to run as
seti_nice=15 # nice level to run at
seti_maxprocs=$(sysctl -n hw.ncpu) # max. number of processes to start
-seti_sleep=21600 # time to sleep between restarts
+seti_sleep_time=21600 # time to sleep between restarts
+set +a
if ! PREFIX=$(expr ${rc_path} : "\(/.*\)/etc/rc\.d/${rc_file}\$"); then
echo "${rc_file}: Cannot determine PREFIX." >&2
@@ -35,12 +40,30 @@ rcconf_file=rc.${rc_file%.sh}.conf
rcconf_path=${rcconf_dir}/${rcconf_file}
if [ -f ${rcconf_path} ]; then
+ set -a
. ${rcconf_path}
+ set +a
fi
program_dir=${PREFIX}/sbin
program_file=${rc_file%.sh}
program_path=${program_dir}/${program_file}
+export program_path
+
+program_args="\
+${seti_std_args} \
+${seti_proxy_server:+-proxy} ${seti_proxy_server} \
+${seti_socks_server:+-socks_server} ${seti_socks_server} \
+${seti_socks_user:+-socks_user} ${seti_socks_user} \
+${seti_socks_passwd:+-socks_passwd} ${seti_socks_passwd} \
+${seti_nice:+-nice} ${seti_nice} \
+"
+export program_args
+
+
+wrapper_dir=${PREFIX}/libexec
+wrapper_file=${rc_file%.sh}.bin
+wrapper_path=${wrapper_dir}/${wrapper_file}
syslog_facility=daemon.err
@@ -50,6 +73,7 @@ while [ ${i} -gt 1 ]; do
seti_wrksuff="${seti_wrksuff} ${i}"
i=$((${i} - 1))
done
+export seti_wrksuff
case "$rc_arg" in
start)
@@ -73,38 +97,44 @@ start)
exit 72
fi
done
- for i in ${seti_wrksuff}; do
- su -fm ${seti_user} -c "exec /bin/sh -T" << EOF > /dev/null &
- cd ${seti_wrkdir}/${i} || exit
- echo \$\$ > shpid.sah
- trap 'kill \$pid;exit' 15
- while :; do
- ${program_path} \
- ${seti_std_args} ${seti_proxy_args} \
- ${seti_nice:+-nice} ${seti_nice} &
- pid=\$!; wait \$pid
- sleep ${seti_sleep} &
- pid=\$!; wait \$pid
- done
-EOF
- done
+ if ps axo comm | egrep ${program_file}; then
+ logger -sp ${syslog_facility} -t ${program_file} \
+ "unable to start: ${program_file} is already running."
+ exit 72
+ fi
+ su -fm ${seti_user} -c "exec ${wrapper_path} > /dev/null &"
echo -n " SETI@home"
;;
stop)
+ pid_path=${seti_wrkdir}/shpid.sah
+ if [ -f ${pid_path} ]; then
+ pid=$(cat ${pid_path})
+ [ -n "${pid}" ] && ps p ${pid} > /dev/null && kill ${pid}
+ rm -f ${pid_path}
+ fi
for i in ${seti_wrksuff}; do
- for pid_path in ${seti_wrkdir}/${i}/pid.sah \
- ${seti_wrkdir}/${i}/shpid.sah; do
- if [ -f ${pid_path} ]; then
- kill $(cat ${pid_path}) 2> /dev/null
- fi
- done
+ pid_path=${seti_wrkdir}/${i}/pid.sah
+ if [ -f ${pid_path} ]; then
+ pid=$(cat ${pid_path})
+ [ -n "${pid}" ] && ps p ${pid} > /dev/null && kill ${pid}
+ fi
done
if [ ! -f ${seti_wrkdir}/pid.sah ]; then
killall ${program_file} 2> /dev/null
fi
;;
+gracefull)
+ for i in ${seti_wrksuff}; do
+ pid_path=${seti_wrkdir}/${i}/pid.sah
+ stop_path=${seti_wrkdir}/${i}/stop_after_send.txt
+ if [ -f ${pid_path} ]; then
+ touch ${stop_path}
+ fi
+ done
+ ;;
+
restart)
$0 stop
$0 start
@@ -187,7 +217,7 @@ register)
;;
*)
- echo "usage: ${rc_file} {start|stop|restart|status|register}" >&2
+ echo "usage: ${rc_file} {start|stop|gracefull|restart|status|register}" >&2
exit 64
;;
esac