crontab不执行扫盲贴(求置顶)

本文针对CronTab执行Shell脚本时遇到的常见问题进行解答,包括用户权限、环境变量差异等方面,帮助读者理解如何正确配置CronTab以确保任务正常执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        最近逛论坛和问答的时候,遇见好几次求助,crontab不执行,大部分的情况是写的脚本手动执行成功,但是crontab就是不执行,下面的回复天马行空,有说检查用户权限的,有说检查系统时间的,简直无语,特立此帖扫盲,篇幅很小,都是精华。


       crontab是绑定用户的

        你用什么用户去创建的crontab,那么他执行的时候也是用什么用户身份. 我不想解释为什么,你看完第二条并且运行我给的命令以后就知道了.我想也没有人会用root去写个sh,然后su otheruser 去crontab -e吧?  有的话当我没说。所以和用户权限无关。至于sh文件的权限,没有执行权限手动都运行不了,但需要注意,在/etc/下有一个cron.deny文件,里面定义了那些用户不能执行crontab(默认存在但里面为空),相应的你可以手动创建dean.allow文件来保存那些用户可以执行crontab,注意:当deny和allow同时存在的时候,仅allow生效,root用户不受此限制,你把root写进去也没用.


       crontab是有自己的环境变量的

        环境变量是什么,我不想大篇幅的去描述,也不想复制百科,简单的理解就是你的身份证,上边有你住址年龄身份,至于查看环境变量,你可以在终端输出export来查看当前登陆bash的用户的环境变量,注意是当前用户的bash环境变量,但corntab有一套自己的环境变量,写个定时脚本

* * * * * export > /root/crontab.log

       等一分钟以后去看这个文件,比较一下用户的环境变量和crontab的环境变量有什么区别,区别大了,我这里只说经常导致出错的问题


       1.path  就是命令的执行路径,crontab寻找命令的路径只有/usr/bin:/bin   而用户的  echo $PATH看一下 /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin,一些常用命令都在/bin或者/usr/bin下  比如ls  所以你不需要   /bin/ls 这样去执行,但是某些命令,比如ifconfig  chkconfig等在/sbin目录,不在这两个目录。当你手动运行的时候,你的path里面有这个路径,所以不需要绝对路径,不过放在crontab里面嘛,呵呵,他找不到。所以,在shell中请使用绝对路径,除非你非常肯定这几个命令在/bin或者/usr/bin下 ,如果你不清楚命令在哪,还比较懒不想写绝对路径,那么请使用whereis 或者 find 查一下你脚本中的路径在不在上述目录中


      2.lang 字符集,我非常不建议使用shell去处理中文,不是说不能处理,而是很容易出错,用户的lang为utf-8而crontab为gbk或者asc的我见过不少,运行出来以后各种不可描述。

     

      3.其它诸如 shell home user pwd等等 我需要我多说了吧


     请确保你的脚本能够手动正确运行再添加crontab

      本文讨论的只是手动运行正确的shell脚本,语法不明的建议先去<<shell变成从入门到精通>>,看了此帖并且修复过你的脚本后,如果你手动运行成功corn运行失败,请扔板砖.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值