From 044a2ff8cf2fd5f4864a3e696d549a7570d607d9 Mon Sep 17 00:00:00 2001 From: Dirk Meyer Date: Sun, 1 Jun 2003 05:45:34 +0000 Subject: 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 --- astro/setiathome/files/rc.setiathome.conf | 15 +- astro/setiathome/files/setiathome.1 | 53 +++- astro/setiathome/files/setiathome.bin | 426 ++++++++++++++++++++++++++++++ astro/setiathome/files/setiathome.sh | 86 ++++-- 4 files changed, 536 insertions(+), 44 deletions(-) create mode 100644 astro/setiathome/files/setiathome.bin (limited to 'astro/setiathome/files') 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 -- cgit v1.2.3