Using crontab instead of rc.d
Hello everyone! My ISP where I have my web page, is running freeBSD 4.0. I do not know a lot about it. I know how to use crontab to start ZOPE at certain time how ever how do I use crontab to check on the script that is already running? Starting ZOPE again when it's running produces an error message and I do not know if that was a healthy solution. to start it I would be using something like: 5 * * * * root ./start This would start the script every five minutes. Now how do I check if the script is running after it's been started and if it wasn't to restart it again. Also I was thinking to run ZOPE in DEBUG mode. That way it stays attached to the terminal (crontab I guess). I know about z2.pid. Nevertheless I find ZOPE down quite often every time they do something at the ISP. I asked them what to do and they told me to use crontab to check the script and restart it. For some reason they don't want me to use rc.d If I could guarantee to remove the z2.pid every time ZOPE goes down, I could apparently include something like this: if [ -x /home/virtuals/account/zope/z2.pid ] then // exit(0) fi 5 * * * * root ./start to check if the file is present and if not to run the script. That can't be done when ZOPE exits abnormally though. Is this setup at all possible? Regards, George Osvald
On Thu, Aug 24, 2000 at 04:05:11AM +1000, George Osvald wrote:
Hello everyone!
My ISP where I have my web page, is running freeBSD 4.0. I do not know a lot about it. I know how to use crontab to start ZOPE at certain time how ever how do I use crontab to check on the script that is already running? Starting ZOPE again when it's running produces an error message and I do not know if that was a healthy solution.
to start it I would be using something like:
5 * * * * root ./start
This would start the script every five minutes. Now how do I check if the script is running after it's been started and if it wasn't to restart it again. Also I was thinking to run ZOPE in DEBUG mode. That way it stays attached to the terminal (crontab I guess). I know about z2.pid. Nevertheless I find ZOPE down quite often every time they do something at the ISP. I asked them what to do and they told me to use crontab to check the script and restart it. For some reason they don't want me to use rc.d If I could guarantee to remove the z2.pid every time ZOPE goes down, I could apparently include something like this:
if [ -x /home/virtuals/account/zope/z2.pid ] then // exit(0) fi
5 * * * * root ./start
to check if the file is present and if not to run the script. That can't be done when ZOPE exits abnormally though.
Is this setup at all possible?
Not quite. You don't want to run the start program from cron directly. What would be better is to write a small script and call that. My hint of the day is that you can use "kill -0 $pid" to test to see whether a pid is alive. eg: if ! kill -0 `cat /home/virtuals/account/zope/z2.pid` ; then cd /home/virtuals/account/zope ; ./start fi However, zope already implements a keepalive facility. If you look at the existing Z2.pid file, you'll notice that there are two pids (at least, there are on my 2.1.6 setup). And if the child dies, it gets restarted. For details, see ~zope/lib/python/zdaemon.py. All of which means that you probably don't want to bother setting this up. -Dom
Hello, Here's something I put together. I am pretty much clueless when it comes to bash shell programming, so this may be a really bad way to do things. I would think you could run this script from your crontab. I tried this on Redhat 6.2 , so YMMV. -garrin -- begin script -- #!/bin/bash ZOPEHOME=/var/Zope-2.2.0-linux2-x86 DEAD=" " for pid in `cat $ZOPEHOME/var/Z2.pid`; do status=`ps --no-headers -p $pid` if test $status == $DEAD; then echo "Restarting Zope" nohup $ZOPEHOME/start break; fi done -- end script -- On Thu, 24 Aug 2000, George Osvald wrote:
Hello everyone!
My ISP where I have my web page, is running freeBSD 4.0. I do not know a lot about it. I know how to use crontab to start ZOPE at certain time how ever how do I use crontab to check on the script that is already running? Starting ZOPE again when it's running produces an error message and I do not know if that was a healthy solution.
to start it I would be using something like:
5 * * * * root ./start
This would start the script every five minutes. Now how do I check if the script is running after it's been started and if it wasn't to restart it again. Also I was thinking to run ZOPE in DEBUG mode. That way it stays attached to the terminal (crontab I guess). I know about z2.pid. Nevertheless I find ZOPE down quite often every time they do something at the ISP. I asked them what to do and they told me to use crontab to check the script and restart it. For some reason they don't want me to use rc.d If I could guarantee to remove the z2.pid every time ZOPE goes down, I could apparently include something like this:
if [ -x /home/virtuals/account/zope/z2.pid ] then // exit(0) fi
5 * * * * root ./start
to check if the file is present and if not to run the script. That can't be done when ZOPE exits abnormally though.
Is this setup at all possible?
Regards,
George Osvald
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
On Wed, 23 Aug 2000, George Osvald wrote:
My ISP where I have my web page, is running freeBSD 4.0. I do not know a lot about it. I know how to use crontab to start ZOPE at certain time how ever how do I use crontab to check on the script that is already running? Starting ZOPE again when it's running produces an error message and I do not know if that was a healthy solution.
to start it I would be using something like:
5 * * * * root ./start
<----SNIP further description---->
Is this setup at all possible?
The first thing I would do would be to handle all of this in a separate script, and call that script from the crontab, rather than trying to integrate the detection of the Zope process into the crontab file. This way you could use your favorite scripting language (I'd use python ;-]) to read the z2.pid file, check for the existence of that process, check to see that the process is indeed the Zope (python) process, and to relaunch Zope if need be. There's still the (probably) very minimal chance that your Zope could die, and then another Zope process could be launched that ends up with the same PID, thus fooling your detection script (depending on how it was coded), but I'm sure even this is preventable, assuming the probability of my scenario occurring is high enough to even warrant this effort. So your crontab would end up like: 5 * * * * root ./startzopeifdead.py The 'startzopeifdead.py' (or whatever you end up naming it) will be the one to execute the './start' command, if need be. rob
participants (4)
-
Dominic Mitchell -
George Osvald -
KIMMELL -
Robert Miller