User Tools

Site Tools


skeleton-daemon.sh

This is an old revision of the document!


#!/bin/sh # This is a skeleton of a bash daemon. To use for yourself, just set the # daemonName variable and then enter in the commands to run in the doCommands # function. Modify the variables just below to fit your preference. daemonName=“DAEMON-NAME” pidDir=“.” pidFile=“$pidDir/$daemonName.pid” pidFile=“$daemonName.pid” logDir=“.” # To use a dated log file. # logFile=“$logDir/$daemonName-“`date +”%Y-%m-%d”`“.log” # To use a regular log file. logFile=“$logDir/$daemonName.log” # Log maxsize in KB logMaxSize=1024 # 1mb runInterval=60 # In seconds doCommands() { # This is where you put all the commands for the daemon. echo “Running commands.” } ################################################################################ # Below is the skeleton functionality of the daemon. ################################################################################ myPid=`echo $$` setupDaemon() { # Make sure that the directories work. if [ ! -d “$pidDir” ]; then mkdir “$pidDir” fi if [ ! -d “$logDir” ]; then mkdir “$logDir” fi if [ ! -f “$logFile” ]; then touch “$logFile” else # Check to see if we need to rotate the logs. size=$1) if $size -gt $logMaxSize; then mv $logFile “$logFile.old” touch “$logFile” fi fi } startDaemon() { # Start the daemon. setupDaemon # Make sure the directories are there. if `checkDaemon` = 1; then echo “ * \033[31;5;148mError\033[39m: $daemonName is already running.” exit 1 fi echo “ * Starting $daemonName with PID: $myPid.” echo “$myPid” > “$pidFile” log '* '`date +“%Y-%m-%d”`“: Starting up $daemonName.” # Start the loop. loop } stopDaemon() { # Stop the daemon. if `checkDaemon` -eq 0; then echo “ * \033[31;5;148mError\033[39m: $daemonName is not running.” exit 1 fi echo “ * Stopping $daemonName” log '* '`date +“%Y-%m-%d”`“: $daemonName stopped.” if ! -z `cat $pidFile`; then kill -9 `cat “$pidFile”` &> /dev/null fi } statusDaemon() { # Query and return whether the daemon is running. if `checkDaemon` -eq 1; then echo “ * $daemonName is running.” else echo “ * $daemonName isn't running.” fi exit 0 } restartDaemon() { # Restart the daemon. if `checkDaemon` = 0; then # Can't restart it if it isn't running. echo “$daemonName isn't running.” exit 1 fi stopDaemon startDaemon } checkDaemon() { # Check to see if the daemon is running. # This is a different function than statusDaemon # so that we can use it other functions. if [ -z “$oldPid” ]; then return 0 elif grep "$oldPid" | grep -v grep` > /dev/null ; then if [ -f “$pidFile” ]; then if `cat "$pidFile"` = "$oldPid"; then # Daemon is running. # echo 1 return 1 else # Daemon isn't running. return 0 fi fi elif grep "$daemonName" | grep -v grep | grep -v "$myPid" | grep -v "0:00.00"` > /dev/null ; then # Daemon is running but without the correct PID. Restart it. log '*** '`date +“%Y-%m-%d”`“: $daemonName running with invalid PID; restarting.” restartDaemon return 1 else # Daemon not running. return 0 fi return 1 } loop() { # This is the loop. now=`date +%s` if [ -z $last ]; then last=`date +%s` fi # Do everything you need the daemon to do. doCommands # Check to see how long we actually need to sleep for. If we want this to run # once a minute and it's taken more than a minute, then we should just run it # anyway. last=`date +%s` # Set the sleep interval if ! $((now-last+runInterval+1)) -lt $((runInterval)); then sleep $2) fi # Startover loop } log() { # Generic log function. echo “$1” » “$logFile” } ################################################################################ # Parse the command. ################################################################################ if [ -f “$pidFile” ]; then oldPid=`cat “$pidFile”` fi checkDaemon case “$1” in start) startDaemon ;; stop) stopDaemon ;; status) statusDaemon ;; restart) restartDaemon ;; *) echo “\033[31;5;148mError\033[39m: usage $0 { start | stop | restart | status }” exit 1 esac exit 0

1)
`ls -l “$logFile” | cut -d “ ” -f 8`/1024
2)
now-last+runInterval
skeleton-daemon.sh.1753034300.txt.gz · Last modified: by 114.119.142.20 · Currently locked by: 10.2.215.44

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki