惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
雷峰网
雷峰网
宝玉的分享
宝玉的分享
IT之家
IT之家
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
博客园 - 叶小钗
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
云风的 BLOG
云风的 BLOG
美团技术团队
爱范儿
爱范儿
T
The Blog of Author Tim Ferriss
L
LangChain Blog
U
Unit 42
有赞技术团队
有赞技术团队
博客园_首页

轶哥博客

blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog
blog
2022-05-02 · via 轶哥博客

在Shell脚本中,特别是Linux操作系统内置的各项启动脚本,经常会遇到需要延迟异步去执行的命令。例如在/etc/rc.local文件或配置网卡相关的脚本文件里面,希望对应脚本能够先返回exit 0以免阻塞任务,然后再异步的去执行不关注执行结果的一些命令,甚至延迟执行异步命令。

在*nux命令中,命令 &为后台进程命令(放在命令参数最后面的&表示设置此命令后台执行)。

因此,在Shell中,命令之后跟上&即异步去执行该命令。

sleep是延时命令,sleep 1代表将命令延迟1秒后执行。

因此,在Shell中异步延迟执行命令,只需要同时使用&sleep。例如异步延迟30秒执行命令:

(
sleep 30
希望被延迟执行的命令
) &

例如,在/etc/rc.local中设置默认网关(这个方法在《Linux网卡优先级配置及同时访问内外网设置》中就有实际应用):

#!/bin/sh

(
sleep 30
/usr/sbin/route add default gw 10.10.11.250 eth0
) &

exit 0

这样一来,exit 0将会被马上执行,而设置网关的任务将会被延迟到30s以后再执行。