是否有应用程序可以在给定命令和选项的情况下执行该进程的生命周期并在特定时间间隔内无限期地ping给定URL?
如果没有,可以在终端上以bash script
进行吗?我几乎可以通过终端来做到这一点,但是我不能流利地在几分钟内鞭打它。
发现this post有一部分解决方案,减去ping
位。 ping
无限期地在linux上运行;直到它被激活杀死。在说了两次ping之后,我怎么能从bash中杀掉它?
答案 0 :(得分:4)
正如其他人所建议的那样,在伪代码中使用它:
PID
PID
处于活动状态时,ping并暂停这导致以下脚本:
#!/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几次,请使用-c
选项:
ping -c <count here> <address here>
示例:
ping -c 2 www.google.com
使用man ping
获取更多信息。
正如hek2mgl在下面的评论中指出的那样,当前的解决方案可能不足以解决问题。在回答这个问题时,核心问题仍将存在。为了解决该问题,建议cron作业定期发送简单的wget或curl 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上的标准。