crontab无法自动执行脚本
我们编写好了一个shell脚本之后,直接运行脚本可以执行,但是用crontab做定时任务时却无法自动执行
已经排除脚本文件的执行权限问题,通过日志也能看到定时任务有被正常执行,但是定时任务下的脚本却没有出结果,这种问题很大可能是环境变量的影响。
-
解决方法:
可以在脚本中最开始的部分加载下这些环境变量,例如脚本最开始的部分加上source /home/postgres/.bash_profile
另外脚本中的一些命令的应用最好也是写成绝对路径,例如find
可以写成/usr/bin/find
-
引申
对于在一个shell脚本中调用另一个shell脚本文件,常用的有三种方法:- fork,直接调用,即在调用时新开一个shell,老的shell依旧存在,新shell执行完之后返回老的shell,新shell继承老shell的环境变量,但是新shell中的环境变量不会带回到老shell中;
- exec,这种方法不需要再新开一个shell,被调用的shell与父脚本在同一个shell内执行,但是使用exec调用脚本之后,父脚本中exec行之后的内容就不会再执行了;
- source,也可以直接写成
.
,也是不需要新开一个shell,并且source行之后的内容依旧会再执行,这样被调用的脚本中声明的变量和环境变量都可以在主脚本中得到和使用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?