开发者

Shell Script For Process Monitoring

This

#!/bin/bash
if [ `ps -ef | grep "91.34.124.35" | grep -v grep | wc -l` -eq 0 ]; then sh home/asfd.sh; fi

or this?

ps -ef | grep "91\.34\.124\.35" | grep -v grep > /dev/null
if [  "$?" -ne "0" ]
then
sh home/asfd.sh
else
echo "Process is running fine"
fi

Hello, how can I write a shell script that looks in running processes and if there isn't a process name CONTAINING 91.34.124.35 t开发者_如何学Pythonhen execute a file in a certain place and I want to make this run every 30 seconds in a continuous loop, I think there was a sleep command.


you can't use cron since on the implementation I know the smallest unit is one minute. You can use sleep but then your process will always be running (with cron it will started every time).

To use sleep just

while true ; do
  if ! pgrep -f '91\.34\.124\.35' > /dev/null ; then
    sh /home/asfd.sh
  fi
  sleep 30
done

If your pgrep has the option -q to suppress output (as on BSD) you can also use pgrep -q without redirecting the output to /dev/null


First of all, you should be able to reduce your script to simply

if ! pgrep "91\.34\.124\.35" > /dev/null; then ./your_script.sh; fi

To run this every 30 seconds via cron (because cron only runs every minute) you need 2 entries - one to run the command, another to delay for 30 seconds before running the same command again. For example:

* * * * * root if ! pgrep "91\.34\.124\.35" > /dev/null; then ./your_script.sh; fi
* * * * * root sleep 30; if ! pgrep "91\.34\.124\.35" > /dev/null; then ./your_script.sh; fi

To make this cleaner, you might be able to first store the command in a variable and use it for both entries. (I haven't tested this).

CHECK_COMMAND="if ! pgrep '91\.34\.124\.35' > /dev/null; then ./your_script.sh; fi"

* * * * * root eval "$CHECK_COMMAND"
* * * * * root sleep 30; eval "$CHECK_COMMAND"

p.s. The above assumes you're adding that to /etc/crontab. To use it in a user's crontab (crontab -e) simply leave out the username (root) before the command.


I would suggest using watch:

watch -n 30 launch_my_script_if_process_is_dead.sh


Either way is fine, you can save it in a .sh file and add it to the crontab to run every 30 seconds. Let me know if you want to know how to use crontab.


Try this:

if ps -ef | grep "91\.34\.124\.35" | grep -v grep > /dev/null
then
    sh home/asfd.sh
else
    echo "Process is running fine"
fi

No need to use test. if itself will examine the exit code.


You can save your script in file name, myscript.sh

then you can run your script through cron,

 */30 * * * * /full/path/for/myscript.sh

or you can use while

 # cat script1.sh
 #!/bin/bash
 while true; do /bin/sh /full/path/for/myscript.sh ; sleep 30; done &

 # ./script1.sh

Thanks.


I have found deamonizing critical scripts very effective.

http://cr.yp.to/daemontools.html


You can use monit for this task. See docu. It is available on most linux distributions and has a straightforward config. Find some examples in this post

For your app it will look something like

check process myprocessname
    matching "91\.34\.124\.35"
    start program = "/home/asfd.sh"
    stop program = "/home/dfsa.sh"

If monit is not available on your platform you can use supervisord.

I also found this question very similar Repeat command automatically in Linux. It suggests to use watch.


Use cron for the "loop every 30 seconds" part.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜