保持Web服务器进程的终端应用程序

时间:2015-07-02 15:19:56

标签: bash terminal zsh

是否有应用程序可以在给定命令和选项的情况下执行该进程的生命周期并在特定时间间隔内无限期地ping给定URL?

如果没有,可以在终端上以bash script进行吗?我几乎可以通过终端来做到这一点,但是我不能流利地在几分钟内鞭打它。

发现this post有一部分解决方案,减去ping位。 ping无限期地在linux上运行;直到它被激活杀死。在说了两次ping之后,我怎么能从bash中杀掉它?

3 个答案:

答案 0 :(得分:4)

一般脚本

正如其他人所建议的那样,在伪代码中使用它:

  1. 执行命令并保存PID
  2. PID处于活动状态时,ping并暂停
  3. 出口
  4. 这导致以下脚本:

    #!/bin/bash
    
    # execute command, use '&' at the end to run in background
    <command here> &
    
    # store pid
    pid=$!
    
    while ps | awk '{ print $1 }' | grep $pid; do
        ping <address here>
        sleep <timeout here in seconds>
    done
    

    请注意<>中的内容应替换为实际内容。无论是命令还是IP地址。

    从循环中断

    要回答你的第二个问题,这取决于循环。在上面的循环中,只需使用变量跟踪循环计数。为此,请在循环内添加((count++))。并执行此操作:[[ $count -eq 2 ]] && break。现在,当我们第二次ping时,循环将会中断。

    这样的事情:

    ...
    while ...; do
        ...
        ((count++))
        [[ $count -eq 2 ]] && break
    done
    

    ping两次

    要仅ping几次,请使用-c选项:

    ping -c <count here> <address here>
    

    示例:

    ping -c 2 www.google.com
    

    使用man ping获取更多信息。

    更好的练习

    正如hek2mgl在下面的评论中指出的那样,当前的解决方案可能不足以解决问题。在回答这个问题时,核心问题仍将存在。为了解决该问题,建议作业定期发送简单的 http请求。这导致一个相当简单的脚本只包含一行:

    #!/bin/bash
    curl <address here> > /dev/null 2>&1
    

    此脚本可以添加为cron job。如果您需要有关如何设置此类预定作业的更多信息,请发表评论。特别感谢hek2mgl分析问题并提出合理的解决方案。

答案 1 :(得分:2)

假设您要使用wget开始下载,并在运行时ping该网址:

wget http://example.com/large_file.tgz & #put in background
pid=$!
while kill -s 0 $pid #test if process is running
do
    ping -c 1 127.0.0.1 #ping your adress once
    sleep 5 #and sleep for 5 seconds
done

答案 2 :(得分:2)

一个很好的小通用实用程序是Daemonize。其相关选项:

Usage: daemonize [OPTIONS] path [arg] ...

-c <dir>       # Set daemon's working directory to <dir>.
-E var=value   # Pass environment setting to daemon. May appear multiple times.
-p <pidfile>   # Save PID to <pidfile>.
-u <user>      # Run daemon as user <user>. Requires invocation as root.
-l <lockfile>  # Single-instance checking using lockfile <lockfile>.

以下是使用中启动/终止的示例:flickd

为了更复杂,您可以将ping脚本转换为systemd service,现在是许多最新Linux上的标准。