如何在 crontab 中让 source ~/.bashrc 生效
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 中)。
先直接给出方案,分如下两步:
- crontab -e 进行配置的时候在前面加上如下配置
SHELL = /bin/bash # 指定 shell 为 bash
- 在
/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 生效的更多相关文章
- Zookeeper客户端cli_st为何在crontab中运行不正常?
实践中,发现直接在命令行终端运行cli_st时,能够得到预期的结果,但一将它放到crontab中,则只收到: bye 相关的一段clit_st源代码如下: if (FD_ISSET(, &rf ...
- shell脚本中执行source命令不生效的解决办法
一个shell脚本文件中有一个source命令,使用bash a.sh命令执行后source命令进行验证没有生效. 这是因为在shell脚本中执行source会看到效果,但是shell脚本执行完后再次 ...
- Linux有问必答:如何在Linux中修改环境变量PATH
提问: 当我试着运行一个程序时,它提示“command not found”. 但这个程序就在/usr/local/bin下.我该如何添加/usr/local/bin到我的PATH变量下,这样我就可以 ...
- crontab中使用python无法执行
手动执行可以的,但是在crontab中却无法执行,在网上搜了一圈,给出的结论是将相对路径改成绝对路径. 改了之后解决这个问题. 是不是依赖某些环境变量,linux 里的 cron 只有几个基本的环境变 ...
- source ~/.bashrc 什么意思
source:使当前shell读入路径为filepath的shell文件并依次执行文件中的所有语句,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录 https://www.cn ...
- 如何在Mac中配置Python虚拟环境,踩了好多坑
如何在Mac中配置Python虚拟环境 1.安装virtualenv pip3 install virtualenv 2.安装virtualenvwrapper pip3 install virtua ...
- [原创]如何在Parcelable中使用泛型
[原创]如何在Parcelable中使用泛型 实体类在实现Parcelable接口时,除了要实现它的几个方法之外,还另外要定义一个静态常量CREATOR,如下例所示: public static cl ...
- 如何在html中插入视频
如何在html中插入视频 1,插入优酷视频: 在优酷分享界面有个html代码,直接复制放入body中,定义div的align居中即可 2.插入本地视频:用video属性 用mp4格式 <vid ...
- 如何在Delphi中调用VC6.0开发的COM
上次写了如何在VC6.0下对Delphi写的COM进行调用,原本想马上写如何在Delphi中调用VC6.0开发的COM时,由于在写事例程序中碰到了个很怪的问题,在我机子上用VC写的接口程序编译能通过. ...
随机推荐
- js下 Day19、综合案例
一.吸顶楼层 效果图: 功能思路分析: 1. 面向对象框架 2. 渲染导航 \1. 数据 \2. 对象结构的数据用for in遍历 \3. 渲染时将属性名设为锚点(a标签的href) 3. 渲染车系 ...
- Linux工具包
Linux的工具包 JDK 版本:14 百度网盘:链接: https://pan.baidu.com/s/1hWqGVmsElOCBufMuscPXzw 密码:st3y 安装步骤: 1.使用S ...
- (十三)、向shell脚本中传参
一.向脚本中传递位置参数 向脚本中传递参数的数目理论上可以无数多,但是只有前9个能被访问,使用shift可以改变此限制 $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 脚本名字 first ...
- Azure Terraform(二)语法详解
一,引言 上篇文章开始,我们简单介绍了以下通过基础设施管理工具----- Terraform,通过它来统一管理复杂的云基础设施资源.作为入门演示,使用Terraform 部署Azure 资源组的方式直 ...
- 十个最常用的JVM 配置参数
1.-Xms:初始堆大小.只要启动,就占用的堆大小. 2.-Xmx:最大堆大小.java.lang.OutOfMemoryError:Java heap这个错误可以通过配置-Xms和-Xmx参数来设置 ...
- 微信支付(PC扫码支付和H5公众号支付)
最近在做微信支付,微信支付比较坑,官方居然只有.NET.C#.PHP的demo居然没有java的demo.然后微信支付是不提供测试账号的需要直接用正式的公众号.首先来介绍下微信扫码支付吧,微信扫码有两 ...
- [leetcode]692. Top K Frequent Words频率最高的前K个单词
这个题的排序是用的PriorityQueue实现自动排列,优先队列用的是堆排序,堆排序请看:http://www.cnblogs.com/stAr-1/p/7569706.html 自定义了优先队列的 ...
- 阿里云ssl证书过期怎么解决 (免费SSL证书) 三步解决
阿里云ssl证书过期怎么解决(免费SSL证书),三步解决 使用免费的SSL证书网站 https://ohttps.com 1.注册帐号 2.申请证书 3.部署到阿里云 4.注意事项 1.注册帐号 到 ...
- SSM框架实现多张图片和其他数据一起上传
一.SSM+Form 多张图片和其他数据一起上传, 1.导包: commons-fileupload-1.3.3.jar commons-io-2.4.jar 2.springmvc.xml 文件配置 ...
- jQuery报错:Uncaught ReferenceError: $ is not defined解决方法
原因及解决办法 1:加载jquery失败,就再次确认jquery的路径是否正确. 2:如果jquery的路径没有问题,那么就可能是浏览器在解释你的js语句时,还没有加载jquery库.所以,你需要将加 ...