首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用bash脚本实现监控

如何利用bash脚本实现监控
EN

Stack Overflow用户
提问于 2013-01-15 23:39:18
回答 2查看 471关注 0票数 0

supervise是守护工具中最强大的工具之一,我想知道如何使用bash脚本来实现它。有谁有建议吗?我需要帮助!

EN

回答 2

Stack Overflow用户

发布于 2013-01-16 03:11:13

supervise执行许多任务,并与svscansvcoksvstat进行互操作。在bash中实现全功能不是一件容易的事,但守护程序重新启动脚本是一项相当简单的任务。

代码语言:javascript
复制
#!/bin/bash
DAEMON=/usr/sbin/whatever      # "/bin/sleep" for demo
DAEMON_ARGS="xxx"              # "15" for sleep demo

case "$1" in 
    start) 
        echo "Starting $DAEMON"
        (
            trap 'logger -i -p daemon.info "INFO: $DAEMON shutting down..."; exit 1' 1 2 3 15
            logger -i -p daemon.info "INFO: Starting $DAEMON"
            while : ; do
                $DAEMON $DAEMON_ARGS &
                pid=$!
                echo $pid > /var/run/mydaemon.pid
                wait $pid
                rc=$?
                logger -i -p daemon.warn "WARNING: $DAEMON exited, rc=$rc"
                sleep 1  # adjust as required
                logger -i -p daemon.warn "WARNING: Restarting $DAEMON"
            done
        ) &
        echo $! > /var/run/myscript.pid
    ;;        

    stop)
        echo "Stopping $DAEMON"
        [ -f /var/run/myscript.pid ] && kill $(</var/run/myscript.pid)
        [ -f /var/run/mydaemon.pid ] && kill $(</var/run/mydaemon.pid)
        ;;
esac

上面的代码几乎没有错误处理功能,不能正确执行chdir()和关闭未使用的FD等真正的守护进程操作,但它会通过logger/syslog记录日志,这样您就可以看到它在做什么。它假设$DAEMON本身不会进入后台(就像supervise一样)。

你还没有说明你的平台,但是如果你想要一些非常非常简单的东西,inittab可能会做到这一点,参见how to use inittab to auto-restart a PHP programme?获取一些提示。否则,我们将脱离堆栈溢出的领域,所以请查看https://unix.stackexchange.com/

票数 1
EN

Stack Overflow用户

发布于 2017-08-09 21:30:57

我对the code provided by mr.spuratic做了一些改动:

代码语言:javascript
复制
echo "true" > $STATUSFILE

case "$1" in

    start) 
        echo "Starting $DAEMON_NAME"
        (
            trap 'logger -t italoService "INFO: $DAEMON_NAME shutting down..."; exit 1' 1 2 3 15
            logger -t italoService "INFO: Starting $DAEMON_NAME"
            while : ; do
                #do_start
                read STATUS <$STATUSFILE
                if [ "$STATUS" = "false" ] ; then
                     logger -t italoService "INFO: $DAEMON_NAME stopped by user"
                     break
                fi
                $DAEMON $DAEMON_OPTS &
                pid=$!
                echo $pid > $PIDFILE
                logger -t italoService "WARNING: pid File: $pid"
                wait $pid
                rc=$?
                logger -t italoService "WARNING: $DAEMON_NAME exited, rc=$rc"
                sleep 1  # adjust as required
                read STATUS <$STATUSFILE
                if [ "$STATUS" = "true" ] ; then
                     logger -t italoService "WARNING: Restarting $DAEMON_NAME"
                fi
            done
        ) &
        echo $! > $PIDFILE
    ;;        

    stop)
        echo "Stopping $DAEMON_NAME"
        echo "false" > $STATUSFILE
        [ -f $PIDFILE ] && kill $(<$PIDFILE)
        [ -f $PIDFILE ] && kill $(<$PIDFILE)
        ;;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14341226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档