缘起
给软路由的网页管理后台,做了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证书自动续期
因为家庭网络的80
和443
等端口都被运营商禁用了。故使用域名服务商的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