沙滩星空的博客沙滩星空的博客

理解Linux中的标准输出,标准错误,输出重定向与shell中 2>&1的用法

缘起

给软路由的网页管理后台,做了HTTPS加密访问。因为SSL证书3个月会过期,所以做了个自动续期。
续期脚本要打印日志。调试定时任务脚本时,发现错误信息无法输出到运行日志中。

看着原有的定时任务有一条命令,是以 2>&1 结尾。
就依葫芦画瓢,在自己的定时任务命令,也加了 2>&1

在软路由执行 crontab -l, 正确的显示如下:

0 2 * * * echo "" > /tmp/log/msd_lite.log
5 0 * * 0 /usr/share/lego/renew.sh >> /usr/share/lego/renew.log 2>&1
10 0 * * 0 /etc/init.d/uhttpd reload
0 6 * * * /usr/share/adbyby/adblock.sh > /tmp/adupdate.log 2>&1

成功解决问题。想着应该是Linux 标准错误 的输出问题。
也就是直接使用 >>> 重定向符输出内容到文件,只重定向了 标准输出
标准错误 的输出内容却丢了,查看运行报错,恰恰是查看日志所必须的。

SSL证书自动续期

因为家庭网络的80443等端口都被运营商禁用了。故使用域名服务商的DNS接口来续期。
API工具使用 lego

/usr/share/lego/renew.sh 内容如下:

ALICLOUD_ACCESS_KEY=YOUR_ALI_KEY ALICLOUD_SECRET_KEY=YOUR_ALI_SECRET /usr/bin/lego --email="youremail@qq.com" --domains="your.site.com" --dns=alidns --path="/etc/ssl/.lego" --accept-tos renew

SSL证书续期成功后,必须重载Web服务配置,才可生效。

输出重定向的推荐写法

# 覆盖写入
./test.sh  > log.txt 2>&1
# 保留原有内容,并追加数据
./test.sh  >> log.txt 2>&1

上面的调用表明将./test.sh的输出重定向到log.txt文件中,同时将标准错误也重定向到log.txt文件中。

文件描述符

  • 0:标准输入(stdin)
  • 1:标准输出(stdout)
  • 2:标准错误(stderr)

2>&1到底是什么意思?https://www.cnblogs.com/chanmufeng/p/16727359.html
如何理解Linux shell中的“2>&1” https://zhuanlan.zhihu.com/p/47765176
Linux shell中2>&1的含义解释 (全网最全,看完就懂) https://blog.csdn.net/zhaominpro/article/details/82630528

未经允许不得转载:沙滩星空的博客 » 理解Linux中的标准输出,标准错误,输出重定向与shell中 2>&1的用法

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址