X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plc.d%2Ffunctions;h=ec6c6ef373d3ed1518d794a53cca55abd3da3ecc;hb=27ae61d51ba27a22a2e9048b90fe158dd3fac592;hp=15318f0075e2df9ddcb5e17d40eb4c254427e828;hpb=e951226571900c068d805fcbe95da3f958555b98;p=myplc.git diff --git a/plc.d/functions b/plc.d/functions index 15318f0..ec6c6ef 100644 --- a/plc.d/functions +++ b/plc.d/functions @@ -1,12 +1,9 @@ # -*-Shell-script-*- -# # Common functions for PLC startup/shutdown scripts # # Mark Huang # Copyright (C) 2006 The Trustees of Princeton University # -# $Id: functions,v 1.7 2007/01/19 17:12:45 mlhuang Exp $ -# export PATH=/sbin:/bin:/usr/bin:/usr/sbin @@ -56,7 +53,16 @@ plc_daemon () [ -n "${pid:-}" -a -z "${force:-}" ] && return # And start it up. - (exec -a plc_${base} $*) + # Thierry -- June 18 2007 + # when invoking, e.g. service plc start httpd from an ssh connection + # ssh stupidly hangs when everything is done + # it turns out the forked ssh daemon exhibits the following stack at that point + # (gdb) where + # #0 0x001d6402 in __kernel_vsyscall () + # #1 0x003c2e7d in ___newselect_nocancel () from /lib/libc.so.6 + # #2 0x004387b4 in main () from /usr/sbin/sshd + # So I figured the various file descriptors used were not properly closed + (exec 3>&- 4>&- ; exec -a plc_${base} $*) ret=$? if [ -f /var/run/${base}.pid ] ; then @@ -69,7 +75,7 @@ plc_daemon () # Print IP address of hostname if resolvable gethostbyname () { - perl -MSocket -e '($a,$b,$c,$d,@addrs) = gethostbyname($ARGV[0]); print inet_ntoa($addrs[0]) . "\n";' $1 2>/dev/null + python -c 'import socket; import sys; print socket.gethostbyname(sys.argv[1])' $1 2>/dev/null } # Forcefully make a symlink @@ -100,7 +106,48 @@ upper () fi } +# Regenerate configuration files +reload () +{ + force=$1 + + # Regenerate the main configuration file from default values + # overlaid with site-specific and current values. + # Thierry -- 2007-07-05 : values in plc_config.xml are *not* taken into account here + files=( + /etc/planetlab/default_config.xml + /etc/planetlab/configs/site.xml + ) + + for file in "${files[@]}" ; do + if [ -n "$force" -o $file -nt /etc/planetlab/plc_config.xml ] ; then + tmp=$(mktemp /tmp/plc_config.xml.XXXXXX) + plc-config --xml "${files[@]}" >$tmp + if [ $? -eq 0 ] ; then + mv $tmp /etc/planetlab/plc_config.xml + chmod 444 /etc/planetlab/plc_config.xml + else + echo "PLC: Warning: Invalid configuration file(s) detected" + rm -f $tmp + fi + break + fi + done + + # Convert configuration to various formats + if [ -n "$force" -o /etc/planetlab/plc_config.xml -nt /etc/planetlab/plc_config ] ; then + plc-config --shell >/etc/planetlab/plc_config + fi + if [ -n "$force" -o /etc/planetlab/plc_config.xml -nt /etc/planetlab/plc_config.py ] ; then + plc-config --python >/etc/planetlab/plc_config.py + fi + if [ -n "$force" -o /etc/planetlab/plc_config.xml -nt /etc/planetlab/php/plc_config.php ] ; then + mkdir -p /etc/planetlab/php + plc-config --php >/etc/planetlab/php/plc_config.php + fi +} + # Make copies of stdout and stderr. The plc initscript redirects # stdout and stderr to a logfile if -v is not specified. -[ ! -e /dev/fd/3 ] && exec 3>&1 -[ ! -e /dev/fd/4 ] && exec 4>&2 +[ ! -e /proc/self/fd/3 ] && exec 3>&1 +[ ! -e /proc/self/fd/4 ] && exec 4>&2