KAOSv 2.10.2

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

BROWN

BLUE

MAG

CYAN

GREY

DARK

USER_ID

STATUS_WORKS

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[search_pattern]

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]

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.createPid

kv.removePid

kv.exit

kv.disableColors

kv.error

kv.warn

kv.show

kv.showm

kv.version

kv.restoreSEContext

kv.readProperty

kv.log

Constants

KV_VERSION = "2.10.2" 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_WORKS = 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 doesn't works, but pid file is exist

STATUS_DEAD_WITH_LOCK = 5 NUMBER
Status code for situation when service doesn't works, but lock file is exist

STATUS_NO_PID = 6 NUMBER
Status code for situation when service works, but pid file is not exist

STATUS_NO_LOCK = 7 NUMBER
Status code for situation when service works, 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

Global Variables

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)

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 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"