cron 是许多类 Unix 操作系统中都自带的用来调度定时任务的工具,定时任务的配置是写在 crontab 文件中的,但是 crontab 文件不允许直接编辑,一般都是通过命令 crontab -e 来导入配置。配置文件中的每一行定义了一个定时任务,格式如下:

分钟 小时 天 月份 星期 命令

比如,有个需要每天凌晨 2 点执行的任务 /home/user/task.sh,那么可以如下配置:

0 2 * * * /home/user/task.sh > /home/user/log 2>&1

注意脚本的路径要写全。

这里一个常见的问题是自己手动在终端执行 /home/user/task.sh 可以成功,但是 cron 定时调度执行的时候却失败了,大部分情况是由于 cron 执行时环境变量跟我们在终端执行时的环境变量不同导致的。解决问题的办法有很多,本文要介绍的是用 source ~/.bashrc (假设用户需要用的环境变量都定义在 ~/.bashrc 中)。

先直接给出方案,分如下两步:

  1. crontab -e 进行配置的时候在前面加上如下配置
SHELL = /bin/bash # 指定 shell 为 bash
  1. /home/user/task.sh 脚本中加入如下命令
set -i
source ~/.bashrc

第一步指定 shell 为 bash,因为大多数情况下 cron 默认的 shell 为 sh,而 ~/.bashrc 中的一些命令是 sh 不支持的,所以需要将 shell 设置为 bash。

第二步执行 source ~/.bashrc 很好理解,就是让 ~/.bashrc 中配置的环境变量生效。前面的 set -i 是设置用交互的方式执行命令,因为在 ~/.bashrc 的开头有一段脚本为

# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac

说明在非交互式的环境下,不会执行 ~/.bashrc 中的任何命令。

以上介绍了如何在 crontab 中让 source ~/.bashrc 生效,主要目的是解决 cron 调度定时任务时由于环境变量导致的问题。

如何在 crontab 中让 source ~/.bashrc 生效的更多相关文章

  1. Zookeeper客户端cli_st为何在crontab中运行不正常?

    实践中,发现直接在命令行终端运行cli_st时,能够得到预期的结果,但一将它放到crontab中,则只收到: bye 相关的一段clit_st源代码如下: if (FD_ISSET(, &rf ...

  2. shell脚本中执行source命令不生效的解决办法

    一个shell脚本文件中有一个source命令,使用bash a.sh命令执行后source命令进行验证没有生效. 这是因为在shell脚本中执行source会看到效果,但是shell脚本执行完后再次 ...

  3. Linux有问必答:如何在Linux中修改环境变量PATH

    提问: 当我试着运行一个程序时,它提示“command not found”. 但这个程序就在/usr/local/bin下.我该如何添加/usr/local/bin到我的PATH变量下,这样我就可以 ...

  4. crontab中使用python无法执行

    手动执行可以的,但是在crontab中却无法执行,在网上搜了一圈,给出的结论是将相对路径改成绝对路径. 改了之后解决这个问题. 是不是依赖某些环境变量,linux 里的 cron 只有几个基本的环境变 ...

  5. source ~/.bashrc 什么意思

    source:使当前shell读入路径为filepath的shell文件并依次执行文件中的所有语句,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录 https://www.cn ...

  6. 如何在Mac中配置Python虚拟环境,踩了好多坑

    如何在Mac中配置Python虚拟环境 1.安装virtualenv pip3 install virtualenv 2.安装virtualenvwrapper pip3 install virtua ...

  7. [原创]如何在Parcelable中使用泛型

    [原创]如何在Parcelable中使用泛型 实体类在实现Parcelable接口时,除了要实现它的几个方法之外,还另外要定义一个静态常量CREATOR,如下例所示: public static cl ...

  8. 如何在html中插入视频

    如何在html中插入视频 1,插入优酷视频: 在优酷分享界面有个html代码,直接复制放入body中,定义div的align居中即可 2.插入本地视频:用video属性  用mp4格式 <vid ...

  9. 如何在Delphi中调用VC6.0开发的COM

    上次写了如何在VC6.0下对Delphi写的COM进行调用,原本想马上写如何在Delphi中调用VC6.0开发的COM时,由于在写事例程序中碰到了个很怪的问题,在我机子上用VC写的接口程序编译能通过. ...

随机推荐

  1. 阿里云视频点播之URL批量拉取上传(调整为多个视频上传)

    项目引入阿里云视频点播PHP-SDK 背景:2021年乐视云的点播将停止提供服务,项目决定选择选用阿里云的视频的点播.在上线前,需要将之前的视频提前导入资源库,URLS方式拉取是比较方便的,对编辑同事 ...

  2. [日常摸鱼]bzoj1007[HNOI2008]水平可见直线-半平面交(对偶转凸包)

    不会写半平面交-然后发现可以转成对偶凸包问题 具体见这里:http://trinkle.blog.uoj.ac/blog/235 相关的原理我好像还是不太懂-orz #include<cstdi ...

  3. java_day_02

    一.return的两个作用 1.停止当前方法 2.将后面的结果数据返回值还给调用处 二.方法的三种调用格式 1.单独调用:方法名(参数): public class Method { public s ...

  4. Unity 2017 Scene界面与Game界面显示不同/过于灰暗的解决办法

    场景界面的显示过于灰暗,严重影响工作心情. 切换到游戏界面时的颜色. 只要将场景中全部摄像机的[Allow HDR]取消勾选即可.

  5. Java发送企业微信应用消息

    1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接收到消息后,再 ...

  6. CAP理论和BASE理论及数据库的ACID中关于一致性及不同点的思考

    CAP定理又被称作是布鲁尔定理,是加州大学伯克利分销计算机科学家里克在2000年提出,是分布式理论基础. CAP:是分布式系统的理论基础 [一致性  可用性   分区容错性] BASE理论是对CAP中 ...

  7. java数组之system.arrayCopy

    public class ArrayDemo { /* public static void main(String[] args) { int[] a=new int[4]; int[] b=new ...

  8. 自动化运维工具-Ansible之2-ad-hoc

    自动化运维工具-Ansible之2-ad-hoc 目录 自动化运维工具-Ansible之2-ad-hoc Ansible ad-hoc Ansible命令模块 Ansible软件管理模块 Ansibl ...

  9. Linux 时间同步 03 ntpdate时间同步

    Linux 时间同步 03 ntpdate时间同步 目录 Linux 时间同步 03 ntpdate时间同步 安装ntpdate 修改/etc/sysconfig/ntpdate 使用ntpdate手 ...

  10. 容器编排系统K8s之NetworkPolicy资源

    前文我们了解了k8s的网络插件flannel的基础工作逻辑,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14225657.html:今天我们来聊一下k8s上 ...