Startup init script for the Distributed WPA PSK strength auditor python script
Turning the `help_crack.py` utility into a system daemon can be achieved by utilizing the `screen` utility, below is my first attempt at it - feel free to comment with improvements or questions.
#!/bin/sh
### BEGIN INIT INFO
# Provides:
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
# Symbolic link this file into your `/etc/init.d`, then run `rcconf` and select the script to start, note the file name must be alphanumeric only
# example: `root@sh1:/etc/init.d# ln -s /usr/local/wpa-sec.stanev.org-help_crack.py/help_crack.py.init.sh help_crack`
dir="/usr/local/wpa-sec.stanev.org-help_crack.py"
cmd="screen -d -m -S help_crack.py ./help_crack.py"
user=""
#!/bin/sh
### BEGIN INIT INFO
# Provides:
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
# Symbolic link this file into your `/etc/init.d`, then run `rcconf` and select the script to start, note the file name must be alphanumeric only
# example: `root@sh1:/etc/init.d# ln -s /usr/local/wpa-sec.stanev.org-help_crack.py/help_crack.py.init.sh help_crack`
dir="/usr/local/wpa-sec.stanev.org-help_crack.py"
cmd="screen -d -m -S help_crack.py ./help_crack.py"
user=""
name=`basename $0`
pid_file="/var/run/$name.pid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"
get_pid() {
cat "$pid_file"
}
is_running() {
[ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1
}
case "$1" in
start)
if is_running; then
echo "Already started"
else
echo "Starting $name"
cd "$dir"
if [ -z "$user" ]; then
#sudo $cmd >> "$stdout_log" 2>> "$stderr_log" & # start it in the background which we don't want so that we can get the right PID
sudo $cmd >> "$stdout_log" 2>> "$stderr_log"
else
# sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" & # start it in the background which we don't want so that we can get the right PID
sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log"
fi
#echo $! > "$pid_file"
# IMPRV: make the session name a variable or extract it from the `cmd`
screen -ls | grep -Po '(?<=\t)(\d+)(?=.help_crack.py)' > "$pid_file"
if ! is_running; then
echo "Unable to start, see $stdout_log and $stderr_log"
exit 1
fi
echo "Started, you can reconnect by typing \`screen -r `get_pid`\`"
fi
;;
stop)
if is_running; then
echo -n "Stopping $name.."
# killin Screen PID is not enough, so we gather all children and kill them too
pids_to_kill=""
current_pid=`get_pid`
#echo "current_pid=$current_pid"
while [ -n "$current_pid" ] # if not empty execute loop
do
pids_to_kill="$current_pid $pids_to_kill"
current_pid=`pgrep -P $current_pid`
done
#echo $pids_to_kill
kill $pids_to_kill
for i in {1..10}
do
if ! is_running; then
break
fi
echo -n "."
sleep 1
done
echo
if is_running; then
echo "Not stopped; may still be shutting down or shutdown may have failed"
exit 1
else
echo "Stopped"
if [ -f "$pid_file" ]; then
rm "$pid_file"
fi
fi
else
echo "Not running"
fi
;;
restart)
$0 stop
if is_running; then
echo "Unable to stop, will not attempt to start"
exit 1
fi
$0 start
;;
status)
if is_running; then
echo "Running, you can reconnect by typing \`screen -r `get_pid`\`"
else
echo "Stopped"
exit 1
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit 0
Comments
Post a Comment