84 lines
2.1 KiB
Bash
Executable File
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
|