Linux运行具有时间限制(超时)的命令
如何启动名为foo的命令,如果在几秒钟内给出DURATION后仍然运行,则将其杀死。
如何在Linux上运行时间限制命令?
如何运行Linux命令,并在N秒后使其超时(中止)?
您可以在Linux中给出超时命令示例吗?
GNU/Linux附带超时命令。
它运行一个有时间限制的命令。
也可以使用Perl或者bash shell运行命令,并使其在N秒后超时。
本教程说明如何启动命令,以及在指定的超时时间到期时将其杀死。
换句话说,请在有限的时间内运行Linux或者Unix命令。
如何在Linux上运行具有时间限制的命令
我们的目标是运行一个名为" ping www.theitroad.local"的命令,其时限为30秒:
- 打开终端应用程序
- 运行ping命令使其在30秒后中止:
times 30s ping www.theitroad.local
可以结合睡眠和其他shell命令:`ping www.theitroad.local&sleep 30s;杀死$!
让我们查看Linux操作系统中的所有超时命令,语法和示例。
Linux时间限制命令
超时命令的语法如下:
timeout DURATION COMMAND timeout DURATION COMMAND arg1 arg2 timeout 1m ping google.com timeout 30s tracepath www.theitroad.local timeout [options] DURATION COMMAND arg1 arg2
DURATION是一个浮点数,带有一个可选的后缀,如下所示:
s
秒(默认)。m
分钟。h
小时。d
天。
如何运行ping命令8秒钟并中止运行
尝试:
date timeout 8s ping www.theitroad.local timeout 8s ping 192.168.1.254 date
ssh的Linux超时命令
假设您只想为运行命令/app1的消防指令启动ssh会话,并在5分钟后死亡,请运行:
timeout 5m [email protected] -- /path/to/app1 --save --force --update
指定超时时要发送的信号
语法为:
timeout -s 9 YourCommandHere timeout --signal=9 YourCommandHere timeout -s 15 30s tracepath google.com timeout -s 9 2m tail -F /var/log/secure ## send SIGTERM as terminate signal ## timeout -s SIGTERM 5m ping google.com
要获取信号列表,请运行以下kill命令:
kill -l
输出示例:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
如何设置宽限期
将-k或者--kill-after = DURATION选项传递给超时命令。
例如,如果在发出初始信号后很长时间COMMAND仍在运行,则发送KILL信号:
timeout -k=5 2m command1 arg1 timeout -k=5 -s SIGKILL 2m /path/to/my-app arg1 arg2
其他选项:
--preserve-status`选项允许超时以与COMMAND相同的状态退出,即使命令超时也是如此。
timeout --preserve-status 10s command1
当不直接从shell提示符运行超时时,--foreground选项允许COMMAND从TTY中读取并获取TTY信号;在这种模式下,COMMAND的子代不会超时:
timeout --foreground 1m command2 ## Login to remote server. Run htop and die after 30seconds ## timeout --foreground 30s ssh -t [email protected] htop timeout --foreground 20s ssh -t Hyman@centos7 top
Bash解决方案
借助read命令和kill命令,语法非常简单:
MyCoolCommand Arg1 & read -t TIMEOUT_VALUE || kill $! command arg1 & read -t 30 || kill $! tail -F /var/log/secure & read -t 60 || kill $! ping 192.168.1.254 & read -t 10 || kill $!
$!包含最近执行的后台管道的进程ID(PID)。
在此示例中,ping是最近执行的后台作业。
在Linux中使用timeout命令来确定可用的ssh身份验证方法
语法如下,借助grep命令为在FreeBSD Unix服务器上运行的sshd提供可用的ssh身份验证方法:
## set up server name and user server="192.168.1.236" user="Hyman" ## Run ssh with true command and grep output timeout 5 ssh -v ${user}@${server} true 2>&1 \ | grep "Authenticating to\|Authentications that can continue:" server="ls.www-db-1" user="Hyman" timeout 5 ssh -v ${user}@${server} true 2>&1 \ | grep "Authenticating to\|Authentications that can continue:"
确保在Linux上禁用ssh密码登录以提高安全性。