github.com/crowdsecurity/crowdsec@v1.6.1/test/lib/init/crowdsec-daemon (about) 1 #!/usr/bin/env bash 2 3 set -eu 4 script_name=$0 5 6 die() { 7 echo >&2 "$@" 8 exit 1 9 } 10 11 about() { 12 die "usage: ${script_name} [ start | stop ]" 13 } 14 15 #shellcheck disable=SC1007 16 THIS_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) 17 cd "${THIS_DIR}"/../../ 18 #shellcheck disable=SC1091 19 . ./.environment.sh 20 21 # you have not removed set -u above, have you? 22 23 [[ -z "${CROWDSEC-}" ]] && die "\$CROWDSEC must be defined." 24 [[ -z "${LOG_DIR-}" ]] && die "\$LOG_DIR must be defined." 25 [[ -z "${PID_DIR-}" ]] && die "\$PID_DIR must be defined." 26 27 if [[ ! -f "${CROWDSEC}" ]]; then 28 die "${CROWDSEC} is missing. Please build (with 'make bats-build') or install it." 29 fi 30 31 DAEMON_PID=${PID_DIR}/crowdsec.pid 32 33 start() { 34 daemonize \ 35 -p "${DAEMON_PID}" \ 36 -e "${LOG_DIR}/crowdsec.err" \ 37 -o "${LOG_DIR}/crowdsec.out" \ 38 "${CROWDSEC}" 39 ./bin/wait-for-port 6060 40 } 41 42 start_pid() { 43 start 44 cat "$DAEMON_PID" 45 } 46 47 stop() { 48 if [[ -f "${DAEMON_PID}" ]]; then 49 # terminate quickly with extreme prejudice, all the application data will be 50 # thrown away anyway. also terminate the child processes (notification plugin). 51 PGID="$(ps -o pgid= -p "$(cat "${DAEMON_PID}")" | tr -d ' ')" 52 # ps above should work on linux, freebsd, busybox.. 53 if [[ -n "${PGID}" ]]; then 54 kill -- "-${PGID}" 55 fi 56 57 rm -f -- "${DAEMON_PID}" 58 fi 59 } 60 61 62 # --------------------------- 63 64 [[ $# -lt 1 ]] && about 65 66 case "$1" in 67 start) 68 start 69 ;; 70 start-pid) 71 start_pid 72 ;; 73 stop) 74 stop 75 ;; 76 *) 77 about 78 ;; 79 esac; 80