KAOSv is bash lib for SysV init scripts.
This lib can be used as replacement for default /etc/init.d/functions lib.
NORM •
BOLD •
UNLN •
RED •
GREEN •
BROWN •
BLUE •
MAG •
CYAN •
GREY •
DARK •
USER_ID •
kv[user] •
kv[dir] •
kv[log] •
kv[nice] •
KV_VERSION = "2.12.0" STRING
Current version of KAOSv
NORM = 0 NUMBER
Code for reset prev color codes
BOLD = 1 NUMBER
Code for bold text
UNLN = 4 NUMBER
Code for underline text
RED = 31 NUMBER
Code for red color
GREEN = 32 NUMBER
Code for green color
BROWN = 33 NUMBER
Code for yellow color
BLUE = 34 NUMBER
Code for blue color
MAG = 35 NUMBER
Code for magenta color
CYAN = 36 NUMBER
Code for cyan color
GREY = 37 NUMBER
Code for light grey color
DARK = 90 NUMBER
Code for dark grey color
USER_ID = $(id -u) NUMBER
Current user id
STATUS_RUNNING = 1 NUMBER
Status code for working service
STATUS_STOPPED = 2 NUMBER
Status code for stopped service
STATUS_BROKEN = 3 NUMBER
Status code for broken service
STATUS_DEAD_WITH_PID = 4 NUMBER
Status code for situation when service is stopped, but pid file is exist
STATUS_DEAD_WITH_LOCK = 5 NUMBER
Status code for situation when service is stopped, but lock file is exist
STATUS_NO_PID = 6 NUMBER
Status code for situation when service is running, but pid file is not exist
STATUS_NO_LOCK = 7 NUMBER
Status code for situation when service is running, but lock file is not exist
ACTION_OK = 0 NUMBER
Status for action performed without errors
ACTION_ERROR = 1 NUMBER
Status for action with some errors
ACTION_FORCED = 2 NUMBER
Status for action which was forced
SIGNAL_HUP = 1 NUMBER
Code for HUP signal
SIGNAL_INT = 2 NUMBER
Code for INT signal
SIGNAL_QUIT = 3 NUMBER
Code for QUIT signal
SIGNAL_ILL = 4 NUMBER
Code for ILL signal
SIGNAL_TRAP = 5 NUMBER
Code for TRAP signal
SIGNAL_ABRT = 6 NUMBER
Code for ABRT signal
SIGNAL_BUS = 7 NUMBER
Code for BUS signal
SIGNAL_FPE = 8 NUMBER
Code for FPE signal
SIGNAL_KILL = 9 NUMBER
Code for KILL signal
SIGNAL_USR1 = 10 NUMBER
Code for USR1 signal
SIGNAL_SEGV = 11 NUMBER
Code for SEGV signal
SIGNAL_USR2 = 12 NUMBER
Code for USR2 signal
SIGNAL_PIPE = 13 NUMBER
Code for PIPE signal
SIGNAL_ALRM = 14 NUMBER
Code for ALRM signal
SIGNAL_TERM = 15 NUMBER
Code for TERM signal
SIGNAL_STKFLT = 16 NUMBER
Code for STKFLT signal
SIGNAL_CHLD = 17 NUMBER
Code for CHLD signal
SIGNAL_CONT = 18 NUMBER
Code for CONT signal
SIGNAL_STOP = 19 NUMBER
Code for STOP signal
SIGNAL_TSTP = 20 NUMBER
Code for TSTP signal
SIGNAL_TTIN = 21 NUMBER
Code for TTIN signal
SIGNAL_TTOU = 22 NUMBER
Code for TTOU signal
SIGNAL_URG = 23 NUMBER
Code for URG signal
SIGNAL_XCPU = 24 NUMBER
Code for XCPU signal
SIGNAL_XFSZ = 25 NUMBER
Code for XFSZ signal
SIGNAL_VTALRM = 26 NUMBER
Code for VTALRM signal
SIGNAL_PROF = 27 NUMBER
Code for PROF signal
SIGNAL_WINCH = 28 NUMBER
Code for WINCH signal
SIGNAL_IO = 29 NUMBER
Code for IO signal
SIGNAL_PWR = 30 NUMBER
Code for PWR signal
SIGNAL_SYS = 31 NUMBER
Code for SYS signal
OOM_DISABLE = "-1000" STRING
This constant can be used as argument in kv.setOOMScoreAdj for disabling OOM Killer
kv[prog_name] = "" STRING
Program name used as base for help/paths/files generation
kv[search_pattern] = "" STRING
Pattern used for searching service process in process tree
kv[lock_file] = "" STRING
Path to lock file
kv[pid_file] = "" STRING
Path to pid file
kv[user] = "" STRING
Service user
kv[dir] = "" STRING
Service dir
kv[auto_pid] = true BOOLEAN
Automatically create pid file while service demonization
kv[auto_lock] = true BOOLEAN
Automatically create lock file while service demonization
kv[auto_info] = true BOOLEAN
Automatically generete help command content
kv[auto_actions_log] = "" BOOLEAN
Automatically log all actions (start/stop/restart/etc...)
kv[auto_pid_search] = true BOOLEAN
Automatically search pid if pid file is not exist
kv[delay_start] = 15 NUMBER
Time in seconds for service start
kv[delay_stop] = 30 NUMBER
Time in seconds for service stop
kv[delay_restart] = 0 NUMBER
Delay between start and stop
kv[pid_dir] = /var/run STRING
Path to pid dir
kv[lock_dir] = /var/lock/subsys STRING
Path to lock dir
kv[log] = "" STRING
Path to log
kv[core_limit] = 0 NUMBER
Core limit
kv[file_limit] = "" STRING
File soft/hard limit
kv[proc_limit] = "" STRING
Processes soft/hard limit
kv[nice] = "" NUMBER
Nice level
kv[ionice] = "" STRING
io nice prefs
kv[oom_adj] = "" NUMBER
OOM Score adjust
kv[supervisor] = "" BOOLEAN
Use supervisor feature
kv[script] = $(readlink -f "$0" | xargs -n1 basename) STRING
Script name
kv[real_user] = $(who -m | cut -f1 -d" " | egrep "[a-z]" || echo "root") STRING
Real user name (search real user name over sudo)
kv.go - Start command processing
*. All arguments passed to service script
Example:
kv.go $@
kv.require - Check required version of kaosv
1. Version STRING
Example:
kv.require "2.7"
kv.addCommand - Add command
1. Command name STRING
2. Command description STRING
3. Handler function name STRING
4. Do not require root for execute BOOLEAN OPTIONAL
Example:
kv.AddCommand "check" "Check config value" "myCheckFunc" true
kv.AddCommand "kill" "Kill connections" "myKillFunc"
kv.addHandler - Add handler for start/stop/restart/status command
1. Command name STRING
2. Handler STRING
3. Type of handler (pre/post/default) STRING
kv.addCommandAlias - Add alias for command
1. Command name STRING
2. Alias name STRING
Example:
kv.addCommandAlias "test" "check"
kv.addCommandArgs - Add some vars for command showed in info
1. Command STRING
*. Vars STRING
Example:
kv.addCommandArgs "stop" "force"
kv.disableOutputRedirect - Disable automatic output redirection
1. Handler name STRING
2. Type of handler (pre/post/default) STRING
kv.readSysconfig - Eval values from sysconfig
1. Name of sysconfig file STRING OPTIONAL
kv.run - Exec command
*. Command STRING
Code: 0 - ok, 1 - not ok
Example:
local status=$(kv.run "/bin/echo" "1234" "ABCD")
if [[ $status -eq 0 ]] ; then
return $ACTION_OK
else
return $ACTION_ERROR
fi
kv.runAs - Exec command as some user
1. User STRING
*. Command
Code: 0 - ok, 1 - not ok
Example:
kv.runAs "someuser" "/bin/echo" "1234" "ABCD"
if [[ $? -eq 0 ]] ; then
return $ACTION_OK
else
return $ACTION_ERROR
fi
kv.daemonize - Daemonize process
1. Binary STRING
*. Command arguments
Code: 0 - ok, 1 - not ok
Example:
kv.daemonize "/usr/bin/daemon" "-d" "-p 80" "-v"
if [[ $? -eq 0 ]] ; then
return $ACTION_OK
else
return $ACTION_ERROR
fi
kv.start - Execute default start handler
*. Any arguments
Code: 0 - ok, 1 - not ok
kv.stop - Execute default stop handler
*. Any arguments
Code: 0 - ok, 1 - not ok
kv.restart - Execute default restart handler
*. Any arguments
Code: 0 - ok, 1 - not ok
kv.status - Execute default status handler
*. Any arguments
Code: 0 - ok, 1 - not ok
kv.usage - Execute default usage handler
*. Any arguments
Code: 0 - ok, 1 - not ok
kv.requireRoot - Require root privileges, if user is not a root, exit with error status
kv.statusIs - Return 0 if service in defined status
1. Status NUMBER OPTIONAL
Code: 0 - ok, 1 - not ok
kv.getStatus - Get status for service
Echo: Status code NUMBER
kv.getPid - Get or find pid
Echo: Pid NUMBER
Example:
local pid=$(kv.getPid)
kv.sendSignal $pid
kv.findPid - Find pid for service
1. Search pattern STRING OPTIONAL
Echo: Pid NUMBER
Example:
local pid=$(kv.findPid "service -c /etc/config.conf")
kv.showProcessMessage - Show message about action in progress
1. Message STRING
Example:
kv.showProcessMessage "Generating data"
kv.showStatusMessage $ACTION_OK
kv.showStatusMessage - Show status of previus action
1. Status code NUMBER
Example:
kv.showProcessMessage "Generating data"
kv.showStatusMessage $ACTION_OK
kv.getStartStatus - Get status of starting service
1. Path to pid file STRING OPTIONAL
2. Don't check process status BOOLEAN OPTIONAL
Code: 0 - ok, 1 - not ok
Example:
if ! kv.getStartStatus ; then
kv.error "Can't start service"
fi
kv.getStopStatus - Get status of stopping service
1. Pid NUMBER OPTIONAL
Code: 0 - ok, 1 - not ok
Example:
if kv.getStopStatus $pid ; then
return $ACTION_OK
else
kv.killProcess $pid
return $ACTION_FORCED
fi
kv.killProcess - Kill service process
1. Pid NUMBER OPTIONAL
kv.isProcExist - Return 0 if process with specified pid exist
1. Pid NUMBER
Code: 0 - ok, 1 - not ok
Example:
if kv.isProcExist 12345 ; then
kv.error "Process with pid 12345 is not exist"
fi
kv.hasUser - Return 0 if user exists on the system
1. Username STRING
Code: 0 - ok, 1 - not ok
Example:
if ! kv.hasUser "serviceuser" ; then
kv.error "User serviceuser is not exist!"
fi
kv.isBoundPort - Check that port is bound (occupied by another process)
1. Port NUMBER
Code: 0 - ok, 1 - not ok
Example:
if kv.isBoundPort 8080 ; then
kv.error "Port 8080 is bound"
fi
kv.isServiceWorks - Check that service is works
1. Service name STRING
Code: 0 - ok, 1 - not ok
Example:
if kv.isServiceWorks "nginx" ; then
kv.error "Service nginx is works"
fi
kv.isInstalled - Return 0 if specified apps installed on the system
1. Apps (List)
Code: 0 - ok, 1 - not ok
Example:
if ! kv.isInstalled "java" "nc" ; then
kv.error "Java and netcat is not installed"
fi
kv.sendSignal - Send signal to service
1. Signal STRING
2. Pid NUMBER OPTIONAL
Code: 0 - ok, 1 - not ok
Example:
if ! kv.sendSignal $SIGNAL_QUIT ; then
kv.error "Can't send signal"
fi
kv.setOOMScoreAdj - Set the adjustment level for the Out of memory (OOM) killer
1. Adjustment level NUMBER OPTIONAL
2. Process pid NUMBER OPTIONAL
Example:
kv.setOOMScoreAdj "-1000" "12345"
kv.setOOMScoreAdj "$OOM_DISABLE"
kv.checkSELinux - Check SE Linux
Code: 0 - ok, 1 - not ok
kv.isRoot - Check is user root
Code: 0 - ok, 1 - not ok
Example:
if ! kv.isRoot ; then
kv.error "This action require root privileges!"
fi
kv.createLock - Create lock file
kv.removeLock - Remove lock file
kv.hasLock - Return 0 if lock file exist
Code: 0 - ok, 1 - not ok
Example:
if kv.hasLock ; then
echo "Lock file exist!"
fi
kv.createPid - Create pid file
1. Pid NUMBER
Example:
kv.createPid 12345
kv.removePid - Remove pid file
kv.exit - Exit from the script
1. Error code NUMBER OPTIONAL
Example:
kv.exit
kv.exit 1
kv.disableColors - Disable all colors in output
kv.error - Show error message
1. Message STRING
2. Error code NUMBER OPTIONAL
Example:
kv.error "My error message"
kv.error "My error message" 10
kv.warn - Show warning message
1. Message STRING
Example:
kv.warn "My warning message"
kv.show - Show message
1. Message STRING
2. Color STRING OPTIONAL
Example:
show "Signal sended"
show "Can't do some action" $RED
kv.showm - Show message without new line symbol
1. Message STRING
2. Color STRING OPTIONAL
kv.version - Show version of kaosv
Echo: Version STRING
kv.restoreSEContext - Restore SELinux context
*. Files
Example:
kv.restoreSEContext "/path/to/file"
kv.readProperty - Read property from file
1. File STRING
2. Property name STRING
3. Delimiter STRING OPTIONAL
Echo: Property value STRING
Example:
local port=$(kv.readProperty "/path/to/my.conf" "port")
local host=$(kv.readProperty "/path/to/my.conf" "host" ":")
kv.log - Add message to logfile or logger
1. Message STRING
Example:
kv.log "My very important message"