Hi all,
I have created an standar init.d script for zabbix agentd. It have been tested on debian and red hat based distros with success. i think will work ok in any UNIX based OS like AIX or HP/UX, but it haven't been tested yet, when i test it will update this thread.
Regarding the automatic startup on boot, if the distibution uses the etc/rcs for launching won't be any problem, for example the automatic startup will not work on AIX because it don't use the rcs.
License:
Feel free to use or modify it as you want, WTFPL license (http://en.wikipedia.org/wiki/WTFPL
), I assume no responsibility for any damages this script may cause - use at your own risk. Anyway, it's very very difficult to cause any problem, maybe stop the agent, but thats all 
Requirement:
-User zabbix on the machine, he controls the zabbix applications such zabbix_agentd and so. If you have a different user just change the user on this line on start and stop functions:
"if [ $(whoami) != "zabbix" ];then"
Features:
- All the code commented for better understanding.
- No configuration file needed, so don't worry about zabbix_agentd.conf or directories and such things.
- Small help when you execute the script with any parameter different to start, stop, restart.
On start:
- Checks if the agent was running before starting it.
- Checks if the user is able to launch the agent, and if not, it launch it as zabbix
- Checks if the agent was correctly launched and tells you how many instances you have running. If the agent didn't launch properly show a message.
On stop:
- Checks if the user is able to launch the agent, and if not, it launch it as zabbix
- Checks if the agent is running, if it's not running shows a message
- Try to stop the agent for five times, if after that it can't be launched shows you a message, also, if it's correctly launched it shows you a message.
How to use it: Create a file on /etc/init.d/ called zabbix and copy the code below and change permissions to 755 (executable file).
Also here you have the symlinks to startup the agent on machine boot.
ln -s /etc/init.d/zabbix /etc/rc2.d/S84zabbix
ln -s /etc/init.d/zabbix /etc/rc3.d/S84zabbix
ln -s /etc/init.d/zabbix /etc/rc5.d/S84zabbix
ln -s /etc/init.d/zabbix /etc/rc4.d/S84zabbix
ln -s /etc/init.d/zabbix /etc/rc6.d/K15zabbix
ln -s /etc/init.d/zabbix /etc/rc0.d/K15zabbix
ln -s /etc/init.d/zabbix /etc/rc1.d/K15zabbix
Enjoy, feedback will be much appreciated.
Here you have the code:
#! /bin/sh
counter=0
zabbix_counter=$(ps -ef | grep zabbix_agentd | grep -v grep | wc -l)
start(){
echo "-------------------------------------------------------------------"
echo " LAUNCHING ZABBIX AGENT"
if [ $zabbix_counter -gt 0 ]; then
echo " * Zabbix agent was previously running"
echo " * Number of zabbix agentd instances= $zabbix_counter"
echo "-----------------------------------------------------------------"
fi
# Checking if the user is able to start the agent.... if the user is not able to, we make a su to
# the user zabbix and start the agent
if [ $(whoami) != "zabbix" ];then
sudo -u zabbix zabbix_agentd
else
# We are the zabbix user, so we can start the agent.
zabbix_agentd
fi
sleep 10
zabbix_counter=$(ps -ef | grep zabbix_agentd | grep -v grep | wc -l)
if [ $zabbix_counter -gt 0 ]; then
echo " * Zabbix agent succesfully launched"
echo " * Number of zabbix agentd instances= $zabbix_counter"
echo "-------------------------------------------------------------------"
else
echo " * Zabbix agent can't be launched, check zabbix logs"
echo "-------------------------------------------------------------------"
fi
}
stop(){
# Checking if the user is able to start the agent.... if the user is not able to, we make a su to
# the user zabbix and kill the agent. Also we try to kill it for 5 times using a counter, if at
# the fith try the agent is still there, we launch a message to the console.
echo "-------------------------------------------------------------------"
echo " STOPPING ZABBIX AGENT"
if [ $zabbix_counter -eq 0 ]; then
echo " * Zabbix agent was not running on this machine"
echo "-------------------------------------------------------------------"
fi
while [ $zabbix_counter -gt 0 ] && [ $counter -lt 5 ] ; do
let counter=counter+1
echo " * Number of Attempts (Max 5)=$counter"
echo " * Stopping zabbix.."
echo " * Number of zabbix agentd instances= $zabbix_counter"
if [ $(whoami) != "zabbix" ];then
sudo -u zabbix killall zabbix_agentd > /dev/null &
else
killall zabbix_agentd > /dev/null &
fi
sleep 10
# We make a 10 seconds delay to avoid the state defunct of the process, if we delete it,
# will enter again on the iteration and will show an error when he tries to kill the process.
# After 10 seconds we check again the number of zabbix_agentd processes running,
# if it's 0 will exit of the iteration and follow the code
zabbix_counter =$(ps -ef | grep zabbix_agentd | grep -v grep | wc -l)
done
if [ $zabbix_counter -gt 0 ]; then
echo "It was not possible to stop the agent, look at th zabbix logs"
echo "-------------------------------------------------------------------"
fi
if [ $zabbix_counter -eq 0 ]; then
echo " * Zabbix agent properly stopped"
echo "-------------------------------------------------------------------"
fi
}
restart(){
stop
# give stuff some time to stop before we restart
sleep 10
# Now we can start the agent again.
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: zabbix {start|stop|restart}"
exit 1
esac
exit 0
I have created an standar init.d script for zabbix agentd. It have been tested on debian and red hat based distros with success. i think will work ok in any UNIX based OS like AIX or HP/UX, but it haven't been tested yet, when i test it will update this thread.
Regarding the automatic startup on boot, if the distibution uses the etc/rcs for launching won't be any problem, for example the automatic startup will not work on AIX because it don't use the rcs.
License:
Feel free to use or modify it as you want, WTFPL license (http://en.wikipedia.org/wiki/WTFPL
), I assume no responsibility for any damages this script may cause - use at your own risk. Anyway, it's very very difficult to cause any problem, maybe stop the agent, but thats all 
Requirement:
-User zabbix on the machine, he controls the zabbix applications such zabbix_agentd and so. If you have a different user just change the user on this line on start and stop functions:
"if [ $(whoami) != "zabbix" ];then"
Features:
- All the code commented for better understanding.
- No configuration file needed, so don't worry about zabbix_agentd.conf or directories and such things.
- Small help when you execute the script with any parameter different to start, stop, restart.
On start:
- Checks if the agent was running before starting it.
- Checks if the user is able to launch the agent, and if not, it launch it as zabbix
- Checks if the agent was correctly launched and tells you how many instances you have running. If the agent didn't launch properly show a message.
On stop:
- Checks if the user is able to launch the agent, and if not, it launch it as zabbix
- Checks if the agent is running, if it's not running shows a message
- Try to stop the agent for five times, if after that it can't be launched shows you a message, also, if it's correctly launched it shows you a message.
How to use it: Create a file on /etc/init.d/ called zabbix and copy the code below and change permissions to 755 (executable file).
Also here you have the symlinks to startup the agent on machine boot.
ln -s /etc/init.d/zabbix /etc/rc2.d/S84zabbix
ln -s /etc/init.d/zabbix /etc/rc3.d/S84zabbix
ln -s /etc/init.d/zabbix /etc/rc5.d/S84zabbix
ln -s /etc/init.d/zabbix /etc/rc4.d/S84zabbix
ln -s /etc/init.d/zabbix /etc/rc6.d/K15zabbix
ln -s /etc/init.d/zabbix /etc/rc0.d/K15zabbix
ln -s /etc/init.d/zabbix /etc/rc1.d/K15zabbix
Enjoy, feedback will be much appreciated.
Here you have the code:
#! /bin/sh
counter=0
zabbix_counter=$(ps -ef | grep zabbix_agentd | grep -v grep | wc -l)
start(){
echo "-------------------------------------------------------------------"
echo " LAUNCHING ZABBIX AGENT"
if [ $zabbix_counter -gt 0 ]; then
echo " * Zabbix agent was previously running"
echo " * Number of zabbix agentd instances= $zabbix_counter"
echo "-----------------------------------------------------------------"
fi
# Checking if the user is able to start the agent.... if the user is not able to, we make a su to
# the user zabbix and start the agent
if [ $(whoami) != "zabbix" ];then
sudo -u zabbix zabbix_agentd
else
# We are the zabbix user, so we can start the agent.
zabbix_agentd
fi
sleep 10
zabbix_counter=$(ps -ef | grep zabbix_agentd | grep -v grep | wc -l)
if [ $zabbix_counter -gt 0 ]; then
echo " * Zabbix agent succesfully launched"
echo " * Number of zabbix agentd instances= $zabbix_counter"
echo "-------------------------------------------------------------------"
else
echo " * Zabbix agent can't be launched, check zabbix logs"
echo "-------------------------------------------------------------------"
fi
}
stop(){
# Checking if the user is able to start the agent.... if the user is not able to, we make a su to
# the user zabbix and kill the agent. Also we try to kill it for 5 times using a counter, if at
# the fith try the agent is still there, we launch a message to the console.
echo "-------------------------------------------------------------------"
echo " STOPPING ZABBIX AGENT"
if [ $zabbix_counter -eq 0 ]; then
echo " * Zabbix agent was not running on this machine"
echo "-------------------------------------------------------------------"
fi
while [ $zabbix_counter -gt 0 ] && [ $counter -lt 5 ] ; do
let counter=counter+1
echo " * Number of Attempts (Max 5)=$counter"
echo " * Stopping zabbix.."
echo " * Number of zabbix agentd instances= $zabbix_counter"
if [ $(whoami) != "zabbix" ];then
sudo -u zabbix killall zabbix_agentd > /dev/null &
else
killall zabbix_agentd > /dev/null &
fi
sleep 10
# We make a 10 seconds delay to avoid the state defunct of the process, if we delete it,
# will enter again on the iteration and will show an error when he tries to kill the process.
# After 10 seconds we check again the number of zabbix_agentd processes running,
# if it's 0 will exit of the iteration and follow the code
zabbix_counter =$(ps -ef | grep zabbix_agentd | grep -v grep | wc -l)
done
if [ $zabbix_counter -gt 0 ]; then
echo "It was not possible to stop the agent, look at th zabbix logs"
echo "-------------------------------------------------------------------"
fi
if [ $zabbix_counter -eq 0 ]; then
echo " * Zabbix agent properly stopped"
echo "-------------------------------------------------------------------"
fi
}
restart(){
stop
# give stuff some time to stop before we restart
sleep 10
# Now we can start the agent again.
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: zabbix {start|stop|restart}"
exit 1
esac
exit 0
Comment