如何在 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写的接口程序编译能通过. ...
随机推荐
- Vue必须必须要注意的几个细节
1.每次执行完,尽量npm run dev 一次,有时候又缓存问题 2.安装sass 一.使用save会在package.json中自动添加.因为sass-loader依赖于node-sass npm ...
- python基本输入与输出
内置函数print()用于输出信息到标准控制台或指定文件,语法格式为: print(value1,value2,... , sep=' ', end='\n', file=sys.stdout, fl ...
- 卷积网络可解释性复现 | Grad-CAM | ICCV | 2017
觉得本文不错的可以点个赞.有问题联系作者微信cyx645016617,之后主要转战公众号,不在博客园和CSDN更新. 论文名称:"Grad-CAM: Visual Explanations ...
- 所有CSS字体属性
font(在一个声明中设置所有的字体属性) font-family(指定文本的字体系列) font-size(指定文本的字体大小) font-style(指定文本的字体样式) font-variant ...
- Linux服务器上搭建测试环境(war包+tomcat)
悟空CRM项目环境部署(Java war项目) 在/root目录下创建一个文件夹(名字自取). ls命令查看一下是否创建成功,看到了新建的文件夹说明创建成功. tomcat和war包的准备:可以使用X ...
- JS 学习 一
- i5 11300H和i5 10300H 的区别
i5-11300H 为 4 核 8 线程,主频 3.1GHz,睿频 4.4GHz,三级缓存 8MB 选 i5-11300H还是i5 10300h 这些点很重要!看完你就知道了https://list. ...
- NTP服务解析
······[NTP服务概述] NTP(Network Time Protocol)服务主要用于同步服务器时间. nptd 可以运行在多种模式下,包括对称的 主动.被动(active/passive) ...
- [日常填坑系列]CAP食用指南-版本引用问题
一.前言 最近,由于好久没升级底层框架,一直用着netcore2.2版本,导致有些包没能更新到最新的版本,例如:CAP. 然而,在最近升级到CAP:3.1.2版本的时候,发现有点小坑,只能退回到CAP ...
- Maven+Spring 框架,ModelAndView在页面取值不成功
如果创建的是maven project , maven生成的web.xml是这样的: 但是这样是不对的,应该修改成: 下面是代码: <?xml version="1.0" e ...