KAOSv 2.15.3

About

KAOSv is bash lib for SysV init scripts.

This lib can be used as replacement for default /etc/init.d/functions lib.

Constants

KV_VERSION
NORM
BOLD
UNLN
RED
GREEN
YELLOW
BLUE
MAG
CYAN
GREY
DARK
USER_ID
STATUS_RUNNING
STATUS_STOPPED
STATUS_BROKEN
STATUS_DEAD_WITH_PID
STATUS_DEAD_WITH_LOCK
STATUS_NO_PID
STATUS_NO_LOCK
ACTION_OK
ACTION_ERROR
ACTION_FORCED
SIGNAL_HUP
SIGNAL_INT
SIGNAL_QUIT
SIGNAL_ILL
SIGNAL_TRAP
SIGNAL_ABRT
SIGNAL_BUS
SIGNAL_FPE
SIGNAL_KILL
SIGNAL_USR1
SIGNAL_SEGV
SIGNAL_USR2
SIGNAL_PIPE
SIGNAL_ALRM
SIGNAL_TERM
SIGNAL_STKFLT
SIGNAL_CHLD
SIGNAL_CONT
SIGNAL_STOP
SIGNAL_TSTP
SIGNAL_TTIN
SIGNAL_TTOU
SIGNAL_URG
SIGNAL_XCPU
SIGNAL_XFSZ
SIGNAL_VTALRM
SIGNAL_PROF
SIGNAL_WINCH
SIGNAL_IO
SIGNAL_PWR
SIGNAL_SYS
OOM_DISABLE

Global Variables

kv[prog_name]
kv[lock_file]
kv[pid_file]
kv[user]
kv[dir]
kv[auto_pid]
kv[auto_lock]
kv[auto_info]
kv[auto_actions_log]
kv[auto_pid_search]
kv[delay_start]
kv[delay_stop]
kv[delay_restart]
kv[pid_dir]
kv[lock_dir]
kv[log]
kv[core_limit]
kv[file_limit]
kv[proc_limit]
kv[nice]
kv[ionice]
kv[oom_adj]
kv[supervisor]
kv[script]
kv[real_user]
kv[output]
cmd_info

Methods

kv.go
kv.require
kv.addCommand
kv.addHandler
kv.addCommandAlias
kv.addCommandArgs
kv.disableOutputRedirect
kv.readSysconfig
kv.run
kv.runAs
kv.daemonize
kv.start
kv.stop
kv.restart
kv.status
kv.usage
kv.requireRoot
kv.statusIs
kv.getStatus
kv.getPID
kv.findPID
kv.showProcessMessage
kv.showStatusMessage
kv.getStartStatus
kv.getStopStatus
kv.killProcess
kv.isProcExist
kv.hasUser
kv.isBoundPort
kv.isServiceWorks
kv.isInstalled
kv.sendSignal
kv.setOOMScoreAdj
kv.checkSELinux
kv.isRoot
kv.createLock
kv.removeLock
kv.hasLock
kv.createPIDFile
kv.removePIDFile
kv.exit
kv.disableColors
kv.error
kv.warn
kv.show
kv.showm
kv.version
kv.restoreSEContext
kv.readProperty
kv.log

Constants

KV_VERSION = "2.15.3" 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
YELLOW = 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 a situation when service is stopped, but PID file is exist
STATUS_DEAD_WITH_LOCK = 5 NUMBER
Status code for a situation when service is stopped, but lock file is exist
STATUS_NO_PID = 6 NUMBER
Status code for a situation when service is running, but PID file doesn't exist
STATUS_NO_LOCK = 7 NUMBER
Status code for a situation when service is running, but lock file doesn't exist
ACTION_OK = 0 NUMBER
Status for an action performed without errors
ACTION_ERROR = 1 NUMBER
Status for an action with some errors
ACTION_FORCED = 2 NUMBER
Status for an 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

Global Variables

kv[prog_name] = "" STRING
Program name used as the base for help/paths/files generation
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 generate 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 doesn't 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 file
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] = "" STRING
Script name
kv[real_user] = "" STRING
Real user name (search real user name over sudo)
kv[output] = "" STRING
Temporary file for service output (can be only set to /dev/null)
cmd_info = ($(pgrep -o -l -f "$pkg_file")) STRING
shellcheck disable=SC2207

Methods

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 arguments supported by command
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 the status of 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 service PID
Echo: PID NUMBER
Example:
local pid=$(kv.findPID)
kv.showProcessMessage — Show message about action in progress
1. Message STRING
Example:
kv.showProcessMessage "Generating data"
kv.showStatusMessage $ACTION_OK
kv.showStatusMessage — Show status message by status code
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 doesn't 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 doesn't 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 a 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. 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 if the user is 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.createPIDFile — Create PID file
1. PID NUMBER
Example:
kv.createPIDFile 12345
kv.removePIDFile — 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 — Print error message
1. Message STRING
Example:
kv.error "My error message"
kv.warn — Print 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"