Patrick Kelley 8fd444092b initial
2025-05-07 15:35:15 -04:00

84 lines
2.1 KiB
Bash
Executable File

#! /usr/bin/env bash
#
# Start Zeek, output the Zeek PID, and return zero. Upon failure, output an
# error message and return nonzero.
#
# start [ -v var=value [ -v ...]] <cwd> <pin_cpu> <zeek_args>
#
# -v var=value...: environment variables to set (optional).
# cwd: the node's working directory.
# pin_cpu: the CPU number to use, or -1 to not use CPU pinning.
# zeek_args: Zeek cmd-line arguments.
. `dirname $0`/../zeekctl-config.sh
while getopts 'v:' flag; do
case "$flag" in
v) export "$OPTARG"
if [ $? -ne 0 ]; then
echo "start: unable to set env. variable \"$OPTARG\" (check the env_vars zeekctl option)" >&2
exit 1
fi
;;
esac
done
origopts="$@"
shift $((OPTIND-1))
if [ $# -lt 3 ]; then
echo "start: too few cmd-line options received: \"$origopts\" (this is usually caused by shell metacharacters in the env_vars zeekctl option)" >&2
exit 1
fi
workingdir="$1"
cd "$workingdir"
if [ $? -ne 0 ]; then
exit 1
fi
shift
rm -f .pid
# Make sure .test does not exist
rm -f .test > /dev/null 2>&1
if [ -e .test ]; then
echo "start: cannot remove files in Zeek working directory (try running zeekctl as a different user, or check permissions of Zeek working dir: $workingdir)" >&2
exit 1
fi
# Create and remove a test file to ensure that the run-zeek script will be able
# to create a pid file.
touch .test > /dev/null 2>&1
rm .test > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "start: problem with Zeek working directory (try running zeekctl as a different user, or check permissions of Zeek working dir: $workingdir)" >&2
exit 1
fi
if [ ! -f "${scriptsdir}"/run-zeek ]; then
echo "start: file not found: ${scriptsdir}/run-zeek" >&2
exit 1
fi
nohup "${scriptsdir}"/run-zeek "$@" >stdout.log 2>stderr.log &
while [ ! -s .pid ]; do
sleep 1
done
pid=`cat .pid`
if [ -z "$pid" ]; then
echo "start: failed to get PID of Zeek" >&2
exit 1
fi
# The "run-zeek" script uses a value of -1 to indicate an error occurred.
if [ "$pid" = "-1" ]; then
exit 1
fi
echo $pid