summaryrefslogtreecommitdiffstats
path: root/encap/src/encap-profiles/runit-1.7.2.ep
diff options
context:
space:
mode:
Diffstat (limited to 'encap/src/encap-profiles/runit-1.7.2.ep')
-rw-r--r--encap/src/encap-profiles/runit-1.7.2.ep95
1 files changed, 80 insertions, 15 deletions
diff --git a/encap/src/encap-profiles/runit-1.7.2.ep b/encap/src/encap-profiles/runit-1.7.2.ep
index 7d7e6c245..e8474ee4d 100644
--- a/encap/src/encap-profiles/runit-1.7.2.ep
+++ b/encap/src/encap-profiles/runit-1.7.2.ep
@@ -140,49 +140,117 @@ fi
]]></include_file>
<include_file name="postinstall" mode="0755"><![CDATA[
-#!/bin/sh -e
+#!/bin/sh
umask 002
BASEDIR="`echo ${0} | xargs -n1 dirname`"
LOG=${BASEDIR}/postinstall.log
exec > $LOG 2>&1
+
printf "Running runit postinstall script...\n"
date
+
+case `uname` in
+ AIX|SunOS) PS="ps -ef" ;;
+ *) PS="ps auxw" ;;
+esac
+
+printf "1: Make sure required directories exist...\n"
test -d /usr/local/var || mkdir /usr/local/var
test -d /usr/local/var/svlogd || mkdir /usr/local/var/svlog
test -d /usr/local/var/service || mkdir /usr/local/var/service
test -d /usr/local/etc || mkdir /usr/local/etc
test -d /usr/local/etc/default || mkdir /usr/local/etc/default
test -d /usr/local/etc/sv || mkdir /usr/local/etc/sv
+
+printf "\n2: Currently running runsv and svlogd processes:\n"
+$PS | grep [r]unsv
+$PS | grep [s]vlogd
+
+printf "\n3: Killing any running runsv and svlogd processes...\n"
+$PS | grep [r]unsv | awk '{print $2}' | xargs -n1 -i{} kill -15 -{} 2>/dev/null
+$PS | grep [s]vlogd | awk '{print $2}' | xargs -n1 -i{} kill -15 -{} 2>/dev/null
+sleep 2
+$PS | grep [r]unsv | awk '{print $2}' | xargs -n1 -i{} kill -9 -{} 2>/dev/null
+$PS | grep [s]vlogd | awk '{print $2}' | xargs -n1 -i{} kill -9 -{} 2>/dev/null
+
+printf "\n4: Currently running runsv and svlogd processes:\n"
+$PS | grep [r]unsv
+$PS | grep [s]vlogd
+
+printf "\n5: Removing any stale state information in /usr/local/etc/sv...\n"
for service in `ls /usr/local/etc/sv`; do
test -d /usr/local/etc/sv/$service/supervise && rm -rf /usr/local/etc/sv/$service/supervise
test -d /usr/local/etc/sv/$service/log/supervise && rm -rf /usr/local/etc/sv/$service/log/supervise
done
+
+printf "\n6: Re-enabling services that were installed before package was removed...\n"
if [ -d /usr/local/var/service/.disabled ]; then
for service in `ls /usr/local/var/service/.disabled`; do
if [ -h /usr/local/var/service/$service ]; then
+ printf "A new version of $service exists, removing old version...\n"
rm /usr/local/var/service/.disabled/$service
else
+ printf "Re-enabling service $service...\n"
mv /usr/local/var/service/.disabled/$service /usr/local/var/service/
fi
done
fi
+
+printf "\n7: Making runsvdir run all the time...\n"
if [ -f /etc/inittab ]; then
printf "Installing to /etc/inittab ...\n"
cd ${ENCAP_SOURCE}/${ENCAP_PKGNAME} && ./inittab-install
-fi
+fi
+
if [ -d /etc/event.d ]; then
printf "Installing to /etc/event.d/SV (Upstart) ...\n"
initctl stop SV 2>/dev/null || true
cd ${ENCAP_SOURCE}/${ENCAP_PKGNAME} && cp upstart.boot /etc/event.d/SV
initctl start SV
fi
-printf "Finished runit postinstall script.\n"
+
+printf "\n8: Finished runit postinstall script.\n"
]]></include_file>
<include_file name="preremove" mode="0755"><![CDATA[
#!/bin/sh
printf "Running runit preremove script...\n"
+umask 002
date
+
+case `uname` in
+ AIX|SunOS) PS="ps -ef" ;;
+ *) PS="ps auxw" ;;
+esac
+
+printf "1: All sv processes runnning before any actions...\n"
+$PS | grep [s]v
+
+printf "\n2: Running sv force-shutdown on all /usr/local/var/service services.\n"
+printf "We wait up to an hour for each service to die - if it takes more than a\n"
+printf "minute, your daemon probably doesn't properly support signals, and you\n"
+printf "will probably want to manually kill the service process in another window.\n"
+for service in `ls /usr/local/var/service`; do
+ printf "Trying to force-shutdown /usr/local/var/service/$service ...\n"
+ sv -v -w 3600 force-shutdown /usr/local/var/service/$service
+done
+sleep 2
+printf "All sv processes runnning now...\n"
+$PS | grep [s]v
+
+printf "\n3: Removing all services from /usr/local/var/service/ - runsvdir should now\n"
+printf "shut down any runsv processes...\n"
+test -d /usr/local/var/service/.disabled || mkdir /usr/local/var/service/.disabled
+mv /usr/local/var/service/* /usr/local/var/service/.disabled/ 2>/dev/null || printf "No services to disable.\n"
+printf "Waiting 10 seconds for runsv processes to die...\n"
+sleep 10
+printf "All sv processes runnning now...\n"
+$PS | grep [s]v
+printf "If there are any runsv or svlogd processes still running, you will need\n"
+printf "to kill them manually.\n"
+
+printf "\n4: Now shutting down the runsvdir processes...\n"
+# Stop the "runsvdir" process {
if [ -f /etc/inittab ]; then
printf "Removing from /etc/inittab ...\n"
cd ${ENCAP_SOURCE}/${ENCAP_PKGNAME} && ./inittab-remove
@@ -194,22 +262,19 @@ if [ -d /etc/event.d ]; then
rm /etc/event.d/SV
fi
fi
-printf "Test, remove this code soon:\n"
-ps auxw | grep sv
-test -d /usr/local/var/service/.disabled || mkdir /usr/local/var/service/.disabled
-for service in `ls /usr/local/var/service`; do
- sv exit /usr/local/var/service/$service
-done
-printf "Waiting 7 seconds for runsv processes to die...\n"
-sleep 7
-mv /usr/local/var/service/* /usr/local/var/service/.disabled/ 2>/dev/null || printf "No services to disable.\n"
-printf "Waiting 7 more seconds for runsv processes to die...\n"
-sleep 7
+# } Stop the "runsvdir" process
+sleep 2
+printf "All sv processes runnning now...\n"
+$PS | grep [s]v
+printf "runsvdir should no longer be running.\n"
+
+printf "\n5: Removing any old state from /usr/local/etc/sv directories...\n"
for service in `ls /usr/local/etc/sv`; do
test -d /usr/local/etc/sv/$service/supervise && rm -rf /usr/local/etc/sv/$service/supervise
test -d /usr/local/etc/sv/$service/log/supervise && rm -rf /usr/local/etc/sv/$service/log/supervise
done
-printf "Finished runit preremove script.\n"
+
+printf "\n6: Finished runit preremove script.\n"
]]></include_file>
<encapinfo>