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