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行之后的内容依旧会再执行,这样被调用的脚本中声明的变量和环境变量都可以在主脚本中得到和使用。
posted @   灬夜露沁心灬  阅读(827)  评论(0编辑  收藏  举报
编辑推荐:
· .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 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示