i have seen that the developers of zookeeper have a great zkServer.sh script to start,stop, restart etc zookeeper, but i have no idea why in the world they decided to skip init script to use.
With the zkServer.sh script no way to set zookeeper to run on startup of the server for example.
So anyone know how to wrap around or a usable and correctly working zookeeper init script?
here is link to the zkServer.sh file
Thanks for your help
Here is my example init script that i just need some help tunning
#!/bin/bash # # /etc/init.d/zookeeper # # Startup script for Zookeeper # # chkconfig: 2345 80 20 # description: Starts and stops Zookeeper # pidfile: /var/run/zookeeper/zookeeper.pid ### BEGIN INIT INFO # Provides: zookeeper # Required-Start: $remote_fs $network $named $time # Required-Stop: $remote_fs $network $named $time # Should-Start: ntp mdadm # Should-Stop: ntp mdadm # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: distributed storage system for structured data # Description: Zookeeper is a distributed (peer-to-peer) system for # the management and storage of structured data. ### END INIT INFO . /etc/rc.d/init.d/functions #export ZK_HOME=/usr/share/zookeeper #export ZK_CONF=/etc/zookeeper/conf #export ZK_INCLUDE=$ZK_HOME/zookeeper.in.sh export ZK_HOME=/zookeeper/opt/zookeeper export ZK_CONF=/zookeeper/opt/zookeeper/conf export ZK_INCLUDE=$ZK_HOME/bin/zookeeper.in.sh #export ZK_OWNR=zookeeper export ZK_OWNR=root NAME="zookeeper" log_file=/var/log/zookeeper/zookeeper.log pid_file=/var/run/zookeeper/zookeeper.pid lock_file=/var/lock/subsys/$NAME #ZK_PROG=/usr/sbin/zookeeper ZK_PROG=/zookeeper/opt/zookeeper/bin/zkServer.sh # The first existing directory is used for JAVA_HOME if needed. JVM_SEARCH_DIRS="/usr/lib/jvm/jre /usr/lib/jvm/jre-1.7.* /usr/lib/jvm/java-1.7.*/jre" # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # If JAVA_HOME has not been set, try to determine it. if [ -z "$JAVA_HOME" ]; then # If java is in PATH, use a JAVA_HOME that corresponds to that. This is # both consistent with how the upstream startup script works, and with # the use of alternatives to set a system JVM (as is done on Debian and # Red Hat derivatives). java="`/usr/bin/which java 2>/dev/null`" if [ -n "$java" ]; then java=`readlink --canonicalize "$java"` JAVA_HOME=`dirname "\`dirname \$java\`"` else # No JAVA_HOME set and no java found in PATH; search for a JVM. for jdir in $JVM_SEARCH_DIRS; do if [ -x "$jdir/bin/java" ]; then JAVA_HOME="$jdir" break fi done # if JAVA_HOME is still empty here, punt. fi fi JAVA="$JAVA_HOME/bin/java" export JAVA_HOME JAVA case "$1" in start) # Zookeeper startup echo -n "Starting Zookeeper: " [ -d `dirname "$pid_file"` ] || \ install -m 755 -o $ZK_OWNR -g $ZK_OWNR -d `dirname $pid_file` $ZK_PROG start /zookeeper/opt/zookeeper/conf/zoo.cfg $ZK_CONF -p $pid_file > $log_file 2>&1 retval=$? [ $retval -eq 0 ] && touch $lock_file echo "OK" ;; stop) # Zookeeper shutdown echo -n "Shutdown Zookeeper: " kill `cat $pid_file` retval=$? [ $retval -eq 0 ] && rm -f $lock_file for t in `seq 40`; do status -p $pid_file zookeeper > /dev/null 2>&1 retval=$? if [ $retval -eq 3 ]; then echo "OK" exit 0 else sleep 0.5 fi; done # Adding a sleep here to give jmx time to wind down (ZK-4483). Not ideal... # Adam Holmberg suggests this, but that would break if the jmx port is changed # for t in `seq 40`; do netstat -tnlp | grep "0.0.0.0:7199" > /dev/null 2>&1 && sleep 0.1 || break; done sleep 5 status -p $pid_file zookeeper > /dev/null 2>&1 retval=$? if [ $retval -eq 3 ]; then echo "OK" else echo "ERROR: could not stop $NAME" exit 1 fi ;; reload|restart) $0 stop $0 start ;; status) status -p $pid_file zookeeper exit $? ;; *) echo "Usage: `basename $0` start|stop|status|restart|reload" exit 1 esac exit 0
The problem now is if i do
service zookeerper start it never completes and if i go look at the running zookeeper services from another terminal session, i see like 3 of them..and when i do
service zookeeper status i get the following
● zookeeper.service - LSB: distributed storage system for structured data Loaded: loaded (/etc/rc.d/init.d/zookeeper; bad; vendor preset: disabled) Active: failed (Result: timeout) since Thu 2017-08-24 18:11:00 UTC; 2min 3s ago Docs: man:systemd-sysv-generator(8) Process: 19673 ExecStart=/etc/rc.d/init.d/zookeeper start (code=exited, status=0/SUCCESS) CGroup: /system.slice/zookeeper.service └─19691 /usr/lib/jvm/java-1.8.0-openjdk-188.8.131.52-2.b16.el7_4.x86_64/jre/bin/java -Dzookeeper.log.dir=. -Dzookeepe... Aug 24 18:06:00 10.34.227.131 systemd: Starting LSB: distributed storage system for structured data... Aug 24 18:06:01 10.34.227.131 zookeeper: Starting Zookeeper: OK Aug 24 18:06:01 10.34.227.131 systemd: PID file /var/run/zookeeper/zookeeper.pid not readable (yet?) after start. Aug 24 18:11:00 10.34.227.131 systemd: zookeeper.service start operation timed out. Terminating. Aug 24 18:11:00 10.34.227.131 systemd: Failed to start LSB: distributed storage system for structured data. Aug 24 18:11:00 10.34.227.131 systemd: Unit zookeeper.service entered failed state. Aug 24 18:11:00 10.34.227.131 systemd: zookeeper.service failed.