crontab 定时执行脚本出错,但手动执行脚本正常
原因: crontab 没有去读环境变量,需要再脚本中手动引入环境变量,可以用source 也可以用export 写死环境变量。
为了定时监控Linux系统CPU、内存、负载的使用情况,写了个Shell脚本,当达到一定值得时候,发送邮件通知。需要用到Crontab的定时任务去执行这个脚本,但是发现通过命令(./test.sh)执行Shell文件的时候,可以获取Linux的环境变量;可是通过Crontab做的定时任务,无法获取。
查找资料之后发现,crontab有一个坏毛病,就是它总是不会缺省的从用户profile文件中读取环境变量参数,经常导致在手工执行某个 脚本时是成功的,但是到crontab中试图让它定期执行时就是会出错。
2种方法可以解决这个问题,
1、在Shell文件里面获取环境变量值的路径写成绝对路径,别用环境变量的路径值。例如获取CPU的使用情况 通过绝对路径/proc/cpuinfo 来获取值;
2、Shell脚本缺省的#!/bin/sh开头换行后的第一行用
#!/bin/sh
. /etc/profile
. ~/.bash_profile
这样,crontab在执行脚本的时候,就能够读到用户的环境变量参数
备注:
如果你是在cron里提交的,请注意:
不要假定c r o n知道所需要的特殊环境,它其实并不知道。所以你要保证在s h e l l脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。
分享一些关于Crontab的小知识
crontab 定时执行脚本出错,但手动执行脚本正常的更多相关文章
- linux定时任务执行没结果,手动执行有结果问题总结
今天写了个脚本手动执行有结果,但是放到系统定时任务跑却没结果,之前也遇到这种问题解决了没记录后面又懵逼了一次~~~ 如下图: 手动执行有结果 放到定时任务中每五分钟执行一次 解决方法: 脚本中加载系统 ...
- mysqldump脚本crontab执行失败,但是手动执行成功
检查备份时发现,cron中定时备份mysql的脚本备份失败,但是手动自行mysql备份脚本却能正常成功 检查cron的环境变量: # cat /etc/crontab ... SHELL=/bin/s ...
- 利用crontab定时提交svn遇到的几个问题
交待下背景...公司开发组只有技术经理有服务器和数据库权限,还只是开发环境的..因为工作安排和权限限制,测试同学上线的时候,需要本人帮开发组的部分同事review代码并把代码提交到trunk.一开始手 ...
- CentOS安装crontab 定时备份文件夹
一. 编写脚本编写一个脚本文件,使脚本可以执行备份命令. 例如,将文件目录 /home/backups/balalala 备份到/home目录下,并压缩.1. 创建脚本命令格式: touch 路径/文 ...
- 小记---------手动执行脚本正常执行,使用crontab定时执行时 不执行
可能出现的原因就是因为crontab不会从用户的/etc/profile文件中读取环境变量,所以就出现 使用定时crontab执行时 无法执行 抛错 所以在使用crontab 定时执行脚本时 在脚本 ...
- linux crontab定时执行shell脚本
linux下使用crontab命令被用来提交和管理用户的需要周期性执行的任务,示例如下:crontab -e 编辑周期任务30 21 * * * /etc/init.d/smb restart 每晚的 ...
- .net 程序通过 crontab 无法启动,手动执行脚本可以启动
一.问题描述 .net 网关程序需要设置定时重启,按照日常操作先把正在运行的 PID kill 掉后,再执行启动服务. 把脚本放到 crontab 计划任务上,可以把服务 PID kill 掉,但无法 ...
- crontab执行脚本中文乱码,手动执行没有问题
crontab执行脚本中文乱码,手动执行没有问题 产生原因: 这是因为Unix/Linux下使用crontab时的运行环境已经不是用户环境了,因此原本用户下的一些环境变量的设置就失效了.例 ...
- linux下使用crontab定时执行脚本
使用crontab定时执行脚本 cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务: crontab –e : 修改 crontab 文件,如果文件不存在会自 ...
随机推荐
- Android Log.isLoggable方法异常:exceeds limit of 23 characters
AndroidRuntime: java.lang.IllegalArgumentException: Log tag "AccountSetupIncomingFragment" ...
- adb shell dumpsys的用法
一. 打印出设备中所有service的信息 zh@zh:~$adb shell dumpsys -l (字母l)zh@zh:~$adb shell service list 二.查询到运行的syste ...
- Android 判断当前是否在跑monkey测试
/** * Returns true if Monkey is running. */ public static boolean isMonkeyRunning() { ...
- 增量式PID的matlab实现
首先,增量式PID的实现公式: 式中 Δe(k)=e(k)-e(k-1) 进一步可以改写成 式中 . . 为了便于理解,也可写成: 式中e(k)为第k次采样时的设定值与实际值的差,e(k-1 ...
- 170804、使用Joda-Time优雅的处理日期时间
简介 在Java中处理日期和时间是很常见的需求,基础的工具类就是我们熟悉的Date和Calendar,然而这些工具类的api使用并不是很方便和强大,于是就诞生了Joda-Time这个专门处理日期时间的 ...
- Guava增强for循环
Guava的前身是Google Collections,是Google开发出的一个开源Java常用类库,包含了一些集合的便捷操作API.本文通过一些常用的例子来剖析Guava的奇妙之处. Guava是 ...
- Convolution and polynomial multiplication
https://www.mathworks.com/help/matlab/ref/conv.html?s_tid=gn_loc_drop conv Convolution and polynomia ...
- stark - 注册表、生成url
一.配置 stark组件开发,仿django自带得admin组件. 1. startapp stark 2. settings: 'stark.apps.StarkConfig' 3. 启动就执行 f ...
- Postgresql 正则表达式(转)
原文:http://blog.csdn.net/wugewuge/article/details/7704996 postgresql支持POSIX 风格的正则表达式,在postgresql中使用正则 ...
- PROPAGATION_REQUIRES_NEW VS PROPAGATION_NESTED
PROPAGATION_REQUIRES_NEW, in contrast to PROPAGATION_REQUIRED, uses a completely independent transac ...