如果我正在执行一个很长的过程,有什么办法可以执行一些基于时间的命令吗?
例如,我正在运行一个非常长的进程,大约运行 10 分钟。
5 分钟后,我想运行一个单独的命令。为了说明,单独的命令可以是:echo 5 minutes complete
(注意:我不希望命令的完成进度,而只是在指定的时间间隔后执行的命令。)
是否可以?
我使用 Ubuntu 服务器 16.04,并且我希望at
在当前会话中使用该实用程序在 1 分钟后执行某些操作(例如echo
),而不提供特定日期和时间 - 仅比当前时间提前 1 分钟。
这失败了:
echo 'hi' | at 1m
Run Code Online (Sandbox Code Playgroud)
我选择的原因at
了sleep
,因为睡眠障碍当前会话是延迟命令为此更适合在另一个会话,而不是大部分时间的一个,我们的工作。AFAIR,at
不会以这种方式行事,也不会妨碍我的会议。
根据 Pied Piper 的回答,我尝试过:
(sleep 1m; echo 'hi') &
Run Code Online (Sandbox Code Playgroud)
我对这种方法有一个问题:“hi”流打印在我的主提示中,并且还在_
包含它的主提示下添加了一个空的辅助提示 ( ),请参阅:
USER@:~# (sleep 1m; echo 'hi') &
[1] 22731
USER@:~# hi
^C
[1]+ Done
Run Code Online (Sandbox Code Playgroud)
通过 Peter Corde 的回答,我尝试过:
(sleep 2 && echo -e '\nhi' && kill -WINCH $$ &)
Run Code Online (Sandbox Code Playgroud)
这在 Bash 4.4 中可以正常工作,但在某些旧版本中似乎无法正常工作(请参阅答案中的评论)。我个人在自己的环境中使用 Bash 4.3。
我在我的大学有一台服务器(debian 7),有公共 ip。当我通过 ssh 进入系统时(从校园外),在我收到密码提示之前,我得到了 5-10 秒的奇怪延迟。这是为什么?
我运行ssh -v
以获得详细的输出:
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
.... delay of 5-10 seconds here
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/nass/.ssh/id_rsa
debug1: Trying private key: /home/nass/.ssh/id_dsa
debug1: Trying private key: /home/nass/.ssh/id_ecdsa
debug1: Next authentication method: password
Run Code Online (Sandbox Code Playgroud)
然后我得到密码提示很好。
我的resolv.conf
样子
domain <mydomain>.edu
nameserver <dns ip address>
Run Code Online (Sandbox Code Playgroud)
防火墙由 控制webmin
,配置/etc/webmin/firewall/iptables.save
如下:
# Generated by iptables-save …
Run Code Online (Sandbox Code Playgroud) 我有两个用 veth-pair 连接的 linux 容器。在一个容器的 veth 接口上,我设置了 tc qdisc netem 延迟并将流量从它发送到另一个容器。如果我使用 tcpdump/wireshark 观察双方的流量,可以看到发送方和接收方的同一数据包的时间戳不会因选定的延迟而有所不同。
我想更详细地了解在哪一点 libpcap 将时间戳放入与 tc qdisc 对应的出口流量。我在互联网上搜索了一个方案/图片,但没有找到。我发现了这个话题(wireshark packet capture point),但它建议通过再增加一个容器/接口来引入间接。在我的情况下,这不是可能的解决方案。有没有办法解决这个问题,而不是引入额外的中间接口(即不改变拓扑),而只能通过在已经给定的 veth-interface 进行记录,但以这种方式可以看到延迟?
更新:
我太快了,所以误会了。我的解决方案(与@AB 答案的第一个变体相同)和@AB 的 IFB 解决方案(我已经检查过)都不能解决我的问题。问题是a1-eth0
拓扑中发送方接口的传输队列溢出:
[a1-br0 ---3Gbps---a1-eth0]---100Mbps---r1---100Mbps---r2
Run Code Online (Sandbox Code Playgroud)
我太快了,只检查了a1-eth0
和路由器之间链接的延迟 10 毫秒r1
。今天我试图提高延迟:100 毫秒、200 毫秒,结果(我得到的每个数据包延迟和速率图)对于上面的拓扑和正常拓扑开始不同:
[a1-eth0]---100Mbps---r1---100Mbps---r2
Run Code Online (Sandbox Code Playgroud)
所以不,当然,为了准确测试,我不能有额外的链接:Linux 网桥、这个 IFB 或任何其他第三方系统都没有引入。我测试拥塞控制方案。我想在特定的拓扑结构中做到这一点。而且我不能仅仅为了绘图而改变拓扑——我的意思是如果我的速率和延迟结果/绘图同时发生变化。
更新 2:
所以看起来已经找到了解决方案,如下所示(NFLOG 解决方案)。
更新 3:
这里描述了 NFLOG 解决方案的一些缺点(大链路层标头和具有零负载的出口 TCP 数据包的错误 TCP 校验和),并提出了一个更好的解决方案,NFQUEUE 没有任何这些问题:零长度出口数据包的 TCP 校验和错误(用 iptables 捕获)。但是,对于我的任务(拥塞控制方案的测试),NFLOG 和 NFQUEUE 都不适合。正如同一个链接所解释的那样,当从内核的 iptables 捕获数据包时,发送速率会受到限制(这就是我的理解)。因此,当您通过从接口捕获(即,定期)在发件人处记录时,您会得到 2 GB 的转储,而如果您通过从 iptables 捕获而在发送者处记录,则会得到 …
在 Debian Jessie 上使用 TTY 登录 shell 时,输入例如Ctrl+ Alt+ F1。有一个不人道的快速延迟,具体来说,设置了这些值(250ms):
root@VB-NB-Debian:~# kbdrate
Typematic Rate set to 10.9 cps (delay = 250 ms)
vlastimil@VB-NB-Debian:~$ sudo kbdrate
Typematic Rate set to 10.9 cps (delay = 250 ms)
Run Code Online (Sandbox Code Playgroud)
我不明白,因为我的 KDE 系统中设置了“正常”810ms。尽管如此,在 Xterm 中,还是kbdrate
说我设置了 250 毫秒的延迟。
无论如何,这不是重点。我需要永久更改所有 TTY 的延迟。你能帮我吗?
我发现这个:调整命令行终端中的键盘灵敏度?但这并不能指导我。我到底该怎么办呢?
那么,问题来了,如何一劳永逸地设置延迟(对速率不感兴趣)呢?
我在我的机器上使用OpenSSH_5.8p1,我正在使用Putty客户端连接我的机器,但速度较慢,所以我在调试模式下运行了 sshd 并发现以下消息有人可以详细解释每条消息吗?
debug1: sshd version OpenSSH_5.8p1
debug1: read PEM private key done: type RSA
debug1: private host key: #0 type 1 RSA
debug1: read PEM private key done: type DSA
debug1: private host key: #1 type 2 DSA
debug1: read PEM private key done: type ECDSA
debug1: private host key: #2 type 3 ECDSA
debug1: rexec_argv[0]='/sbin/sshd'
debug1: rexec_argv[1]='-d'
Set /proc/self/oom_adj from 0 to -17
debug1: Bind to port 22 on 0.0.0.0.
Server listening on 0.0.0.0 …
Run Code Online (Sandbox Code Playgroud)