crontab不执行 脚本执行报错,该如何处理

&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
shell脚本直接执行没有问题,crontab定时执行失败的解决方法
摘要:shell脚本直接执行没有问题,crontab定时执行失败的解决方法。在实行一个shell脚本(调用java程序修改一个excel文件)时,单独sh可以得到想要的结果。但是放到crontab定时执行后,却没有得到一个新的excel文件,log也没有报错。查看了路径,文件权限都没有问题,最后在网上查了一下,发现这样可以解决问题:将crontab执行的语句进行修改:1511***/home/loganalysis/dealexcel.sh&&/home/loganal
shell脚本直接执行没有问题,crontab定时执行失败的解决方法。
在实行一个shell脚本(调用java程序修改一个excel文件)时,单独sh可以得到想要的结果。
但是放到crontab定时执行后,却没有得到一个新的excel文件,log也没有报错。
查看了路径,文件权限都没有问题,最后在网上查了一下,发现这样可以解决问题:
将crontab执行的语句进行修改:15 11 * * * /home/loganalysis/dealexcel.sh && /home/loganalysis/error.log 2&&;1修改为:15 11 * * * cd /home/loganalysis/ &;&; ./dealexcel.sh && /home/loganalysis/error.log 2&&;1
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
新用户大礼包!
现在注册,免费体验40+云产品,及域名优惠!
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
shell脚本直接执行没有问题,crontab定时执行失败的解决方法相关信息,包括
的信息,所有shell脚本直接执行没有问题,crontab定时执行失败的解决方法相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
International3.1k 次阅读
解决需要 导入环境变量
有两种导入方法:
在crontab -e编辑时加入
. /etc//bin/sh #主要"."后要有个空格
0 12 * * * . /etc//bin/sh /your/sh/your_sh.sh
在你要运行的脚本的开头加入
source /etc/profile
1 收藏&&|&&0
好贴,做下补充吧
也要注意相对路径的问题
最好先cd到脚本执行的路径
之前碰到一次~
好贴,做下补充吧
也要注意相对路径的问题
最好先cd到脚本执行的路径
之前碰到一次~
分享到微博?
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。crontab 脚本执行报错
[问题点数:80分,结帖人wb4313]
本版专家分:0
结帖率 85.71%
CSDN今日推荐
本版专家分:55397
2012年4月 Linux/Unix社区大版内专家分月排行榜第一2012年3月 Linux/Unix社区大版内专家分月排行榜第一2012年2月 Linux/Unix社区大版内专家分月排行榜第一2012年1月 Linux/Unix社区大版内专家分月排行榜第一2011年7月 Linux/Unix社区大版内专家分月排行榜第一2011年6月 Linux/Unix社区大版内专家分月排行榜第一2011年2月 Linux/Unix社区大版内专家分月排行榜第一2011年1月 Linux/Unix社区大版内专家分月排行榜第一
2013年7月 Linux/Unix社区大版内专家分月排行榜第二2012年6月 Linux/Unix社区大版内专家分月排行榜第二2011年5月 Linux/Unix社区大版内专家分月排行榜第二2011年4月 Linux/Unix社区大版内专家分月排行榜第二2011年3月 Linux/Unix社区大版内专家分月排行榜第二2010年10月 Linux/Unix社区大版内专家分月排行榜第二2010年9月 Linux/Unix社区大版内专家分月排行榜第二
2011年9月 Linux/Unix社区大版内专家分月排行榜第三2010年12月 Linux/Unix社区大版内专家分月排行榜第三2010年11月 Linux/Unix社区大版内专家分月排行榜第三2010年9月 C/C++大版内专家分月排行榜第三
本版专家分:0
本版专家分:0
匿名用户不能发表回复!
其他相关推荐1.问题描述:在使用crontab定时执行发布包sql脚本解析工作时,出现了一个奇怪的问题,脚本执行到生成release_xxxx.tmp文件就终止执行了,且release_xxxx.tmp文件是空的。但是以同样的方式手动执行dbmisProject.sh脚本却可以正常执行。
2.解决办法将crontab的输出结果重定向到一个日志文件中,以记录crontab执行的过程中发生了什么错误。(1)修改现有的crontab任务0 3 * * 4 sh /home/dbmisTool/bin/dbmisProject.sh > /dev/null 2>&1为0 3 * * 4 sh /home/dbmisTool/bin/dbmisProject.sh > /tmp/dbmisProject.log 2>&1这样,只要在周四查看dbmisProject.log文件即知道crontab任务失败的原因了。
(2)周四查看dbmisProject.log中的内容如下:/home/dbmisTool/bin/dbmisProject.sh: line 118: svn: command not foundls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directory/home/dbmisTool/bin/dbmisProject.sh: line 185: sqlplus: command not foundcat: /home/dbmisTool/tmp/report_.txt: No such file or directoryN hope that's ok原来是环境变量的问题,crontab在执行的时候只会定义少数环境变量而不是继承用户shell环境中的环境变量。因为svn: command not found和sqlplus: command not found说明找不到命令,其实是找不到这两个命令对应的可执行文件所在的目录。
(3)在脚本中添加了source /root/.bash_profile命令,在crontab执行脚本时将root用户的环境变量加载进去。发现dbmisProject.log中的报错信息已经由/home/dbmisTool/bin/dbmisProject.sh: line 118: svn: command not foundls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directory/home/dbmisTool/bin/dbmisProject.sh: line 185: sqlplus: command not foundcat: /home/dbmisTool/tmp/report_.txt: No such file or directoryN hope that's ok变为/home/dbmisTool/bin/dbmisProject.sh: line 123: svn: command not foundls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directoryls: /disk2/db_release: No such file or directorycat: /home/dbmisTool/tmp/report_.txt: No such file or directoryN hope that's ok
即sqlplus命令已经可以找到,但是svn命令还是无法找到,但是使用man svn是可以查看到的帮助信息的。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。使用which命令查看svn所在的目录:[root@db_dev_bak disk2]# which svn/usr/local/bin/svn于是将svn所在的路径加在了svn前面,即对svn命令作如下修改:修改原命令svn co --username=xxxxx --password=xxxx 为/usr/local/bin/svn co --username=xxxxx --password=xxxx 再看此时crontab任务生成的的dbmisProject.log,之前的svn: command not found错误已经消失,取而代之的是一个新的错误:svn: Can't convert string from 'UTF-8' to native encoding:svn: db_release/2?\161?\165cat: /home/dbmisTool/tmp/report_.txt: No such file or directoryN hope that's ok
cron job在执行的时候只会定义少数环境变量而不是继承用户shell环境中的环境变量,所以在svn碰到含有cron job环境中设定的字符集不能处理的字符的文件名时会导致检出失败。解决方法就是在脚本中加入:export LC_CTYPE=zh_CN.GB18030之前在网上看到有的是加载en_US.UTF-8字符集,但是我试了一下,在系统上显示是乱码,这个还是要因系统而异。经过以上对脚本的修改,终于大功告成,定时任务可以正常运行了。
PS:在完成对这个定时任务的修正以后得到了一个更为简单的方法,即只要在脚本中加入以下即可:
source /etc/profilesource /etc/sysconfig/i18n
&&&回复&&&:
北京盛拓优讯信息技术有限公司. 版权所有 京ICP备号 北京市公安局海淀分局网监中心备案编号:10
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员最近有个需求,就是定时检查一个数据库表格中的条目,一旦条目增加及时报告给管理员来处理。于是,我想到了用一个脚本来实现数据的获取、比对、处理和邮件发送(139邮箱可以设置免费短信报警,很实用的功能)。
脚本如下:
#!/bin/bash
mysql=/usr/local/mysql/bin/mysql
a=`$mysql -e "SELECT id FROM db_lius.tb_"`
b=`echo $a | awk '{print $NF}'`
c=`cat /home/lius/kid.txt`
if [ $b -ne $c ]; then
echo $b &| /home/lius/kid.txt
cat /home/lius/management/massage.txt | mail -s "有新的条目更新" @139.com
[ `echo $?` -eq 0 ]; then
echo "`date +%F\ %H:%M:%S`:执行成功"
echo "`date +%F\ %H:%M:%S`: 邮件发送失败,请检查"
echo "`date +%F\ %H:%M:%S`: 无条目更新,略过。。。"
在/home/lius/management/massage.txt 中,是发送给139邮箱的正文信息,直接读取用mail命令来发送;
/home/lius/kid.txt 中,是上一次获取到的数据库条目数字,默认数据库表中有id字段;
crontab任务:
1 * * * * cd /home/lius/management && ./lius.sh 2&& /home/lius/management/kid.cron.err 1&& /home/lius/management/kid.cron.log
每一小时执行一遍脚本,错误和正确的输出信息都记录日志。
出现的问题:
一开始的时候,脚本中没有:
mysql=/usr/local/mysql/bin/mysql
而是直接用mysql来运行的。
cron任务中也是用绝对路径来执行的:
1 * * * * /home/lius/management/lius.sh 2&& /home/lius/management/kid.cron.err 1&& /home/lius/management/kid.cron.log
开始脚本在shell中运行没有出现问题,在cron任务设定以后,每次执行都有问题。
网上有帖子说是权限问题,因此按照他的建议改为了:
cd /home/lius/management && ./lius.sh
然而问题依然存在,是和mysql相关的错误提示。于是,将脚本中的mysql改成了绝对路径:
mysql=/usr/local/mysql/bin/mysql
然后用$mysql来引用,果然问题就解决了。
估计的原因是cron后台进程无法在PATH中找到mysql的可执行文件的位置。
因此,脚本中使用的命令尽量使用绝对路径,防止出现不必要的麻烦。
crontab执行sh脚本和手动执行结果不一样问题解决
当使用crontab执行sh脚本时,发现存到数据库的数据丢失了非常多,困惑。。。于是gezhong...
可直接执行的脚本放到crontab中就不执行了
iamlaosong文
前面文章曾提到过的定时检测压缩包并完成解压、修改文件名和导入到数据库的脚本(检测压缩包并处理的Linux脚本(解压、批量修改文件名、导入)),后来发现放到crontab中就无法...
bash脚本错误检查
bash shell 简单错误处理
shell脚本直接执行没有问题,crontab定时执行失败的解决方法
crontab 定时执行不生效:
1.环境变量问题
2.执行路径问题
问题2往往可以归结为问题1,即配置环境变量。
在开头部分添加:
PATH=/usr/local/s...
在linux中执行shell脚本,当前用户执行没有问题,设置为定时任务却报错
在linux中执行shell脚本,当前用户执行没有问题,设置为定时任务却报错,有可能的原因有主要原因是crontab执行和当前用户的执行权限和配置环境不一样,所以导致你的配置环境在crontab用户上...
Linux 系统里面计划任务,crontab 没有如期执行这是运维工作中比较常见的一种故障了。下面结合最近部署自动脚本不执行问题排查步骤:1、检查 crontab 服务是否正常[dmdba@test_...
crontab文件内容,文件名为zcg_task10 12 5 8 5 /home/zcg/task1.sh
表示在0分钟,12小时,5号,8月,星期五 执行/home、zcg/task1.sh 这...
c o n是系统主要的调度进程,可以在无需人工干预的情况下运行作业。有一个叫做
c r o n t a b的命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个c r o n t a b文...
shell脚本手动执行成功,定时任务调用失败的解决方法。
场景:写的shell脚本,在secureCRT 命令窗口执行没有问题,当添加定时任务执行shell脚本时出现如下中的某些问题。
1,出现找不着 命令如:java、db2等命令。
2,编码格式不对等,如...
crontab不能成功执行shell脚本的可能原因
我们经常会需要使用crontab进行定时任务,但crontab不能成功执行脚本的情况还是很常见,总结起来,本人了解到的和自己遇到的可能原因主要有以下几个:
1. crond进程不存在,该进程是...
没有更多推荐了,

我要回帖

更多关于 crontab不执行 的文章

 

随机推荐