[CentOS] 解决 crontab 无法读取环境变量的问题
2024-10-19 11:50:48
参考资料:http://blog.slogra.com/post-238.html
1. 问题描述
一段数据处理的 shell 程序,在 shell 中手动运行,可以正确执行。但是,把它放在 crontab 列表里,就会报错,提示 "matlab: command not found."。
AutoRefreshData.sh 的部分内容如下:
[She@She ~]$ cat /home/She/data/AutoRefreshData.sh
#!/bin/bash
...
MatlabFile='/mnt/L/Data/main4mat.m'
chmod +x ${MatlabFile}
matlab -nodesktop -nosplash -nojvm < ${MatlabFile} >running.log >running.err &
在终端下,AutoRefreshData.sh 可正确执行:
[She@She ~]$ /home/She/data/AutoRefreshData.sh
[She@She ~]$ cat ~/running.log
< M A T L A B (R) >
Copyright 1984-2015 The MathWorks, Inc.
R2015b (8.6.0.267246) 64-bit (glnxa64)
August 20, 2015
For online documentation, see http://www.mathworks.com/support
For product information, visit www.mathworks.com.
>> >> >> >> >> >> >> /mnt/L/Data/matFile/jpl16228.mat
>>
[She@She ~]$ cat ~/running.err
[She@She ~]$
将该 shell 脚本添加到 crontab 中:
[She@She ~]$ crontab -l
# part 2: refresh She data from FTP
08 12 * * * /home/She/data/AutoRefreshData.sh > /dev/null 2>&
在 crontab 中,运行报错,结果如下:
[She@She ~]$ cat ~/running.log
[She@She ~]$ cat ~/running.err
/home/She/data/AutoRefreshData.sh: line 111: matlab: command not found
2. Bug 原因分析与修复
原因分析:crontab 有一个坏毛病, 就是它总是不会缺省的从用户 profile 文件中读取环境变量参数,经常导致在手工执行某个脚本时是成功的,但是到 crontab 中试图让它定期执行时就是会出错。
修复:在脚本文件的开头,强制要求导入环境变量,可保万无一失。
这样的话,脚本的头部一律以下列格式开头:
#!/bin/sh
. /etc/profile
. ~/.bash_profile
以 AutoRefreshData.sh 为例,它的头部则由
[She@She ~]$ cat /home/She/data/AutoRefreshData.sh
#!/bin/bash
...
MatlabFile='/mnt/L/Data/main4mat.m'
chmod +x ${MatlabFile}
matlab -nodesktop -nosplash -nojvm < ${MatlabFile} >running.log >running.err &
改为:
[She@She ~]$ vi /home/She/data/AutoRefreshData.sh
#!/bin/sh
. /etc/profile
. ~/.bash_profile
...
MatlabFile='/mnt/L/Data/main4mat.m'
chmod +x ${MatlabFile}
matlab -nodesktop -nosplash -nojvm < ${MatlabFile} >running.log >running.err &
之后,更新 crontab 中的运行时间,立即测试,一切正常,不再报错。
[She@She ~]$ cat ~/running.log < M A T L A B (R) >
Copyright - The MathWorks, Inc.
R2015b (8.6.0.267246) -bit (glnxa64)
August , For online documentation, see http://www.mathworks.com/support
For product information, visit www.mathworks.com. >> >> >> >> >> >> >> /mnt/L/Data/matFile/jpl16228.mat
>>
[She@She ~]$ cat ~/running.err
[She@She ~]$
Done。
最新文章
- c++防止客户端多开巧妙代码
- window 链接方式
- 关于hibernate的n+1问题以及解决办法
- 0e开头md5汇总
- 客户端安全-xss-2解决方案
- 《CheckboxDemo.java》
- 带参数的查询防止SQL注入攻击
- #AzureChat - 自动伸缩和虚拟机
- UU农场平台开发 UU农场拆复利系统
- PE格式第四讲,数据目录表之导入表,以及IAT表
- UWP应用程序使用Prism框架构建MVVM
- 第四届河南省ACM SUBSTRING 字符串处理
- 设计模式系列19:策略模式(Stragety Pattern)
- 从PRISM开始学WPF(二)Prism-更新至Prism7.1
- javascript 常用方法 解析URL,补充前导字符
- 如何去除vue项目中的 # --- History模式
- Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第七集之SSH远程连接——克隆与更改配置】
- .Net反编译软件
- python一些东西
- java搭建web从0-1(第一步:创建web工程)
热门文章
- js手风琴
- Git使用指南(1)——Git配置命令
- 第一个python实例--监控cpu
- 复旦高等代数 II(15级)思考题
- ASP.NET中cookie与Fiter实现简单登陆,AllowAnonymous匿名登陆
- 在 ASP.NET MVC 中使用 HTML Helpers 的那些事
- linux搭建LAMP
- set集合(set是一个无序且不重复的元素集合)
- 1. C语言中的数据结构.md
- Xcode7 *** does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE)