ZHYCarge的博客

旧平台,已不再维护,请点击下方链接转至新平台访问

0%

crontab无法执行(错误分析及solve)

前言

由于比较懒,因此写了一个小脚本用来定时运行EPIC的领游戏插件,之后发现 crontab命令无法运行,因此记录一下解决方法

参考内容

Crontab日志无法输出

ubuntu打开crontab日志及不执行常见原因

crontab 脚本错误日志和正确的输出写入到文件

查看日志

程序出错的话第一步还是先去看日志比较好,因此打开日志,发现没有日志输出,通过参考相关教程之后发现可能是日志功能未进行打开,因此

  1. sudo vim /etc/rsyslog.d/50-default.conf
  2. cron.* /var/log/cron.log #将cron前面的注释符去掉
  3. sudo service rsyslog restart
  4. 等待执行之后,输入 tail -f /var/log/cron.log 来查看相关日志

找bug

发现问题1

在运行结束之后果然发现了相关问题,log报错记录如下:

mailed 366 bytes of output but got status 0x00ff from MTA#012

继续查询文章,发现

image-20211226100544716

因此明白了解决方向

根据其博客所说,在所有要执行的语句后面加上 >/dev/null 2>&1或者&> /dev/null即可,即

*/5 * * * * sh /var/xxx/xxx.sh >/dev/null 2>&1

之后重启cron服务即可

service cron restart

发现问题2

crontab什么时候会发送邮件呢?在运行脚本出错的时候。。。。因此我需要它发送的信息以便去核查代码是否有问题。。。因此我还得需要这个邮件日志。。。因此,继续查询博客,找到如下内容

把正确以及错误的日志都输出:

*/1 * * * * /root/XXXX.sh > /tmp/load.log 2>&1 &

只输出正确日志:

*/1 * * * * /root/XXXX.sh > /tmp/load.log & 等同于 */1 * * * * /root/XXXX.sh 1>/tmp/load.log &

只输出错误日志:

*/1 * * * * /root/XXXX.sh 2> /tmp/load.log &

因此,再次尝试之后,我又发现了问题3。。。

发现问题3

Crontab中,默认执行路径是当前系统的根目录,在邮件排查中,我发现了所用到的python文件进行过其他的文件调用。由于在命令行中运行,python文件均在一起,因此无需进行目录统一。。但是在 crontab中需要进行要求。因此可以通过曲线救国的方式,将 Crontab的执行路径更换成脚本所在路径:

  1. 新增一个脚本文件auto.sh

  2. 在其中输入

    1. ```bash
      cd “你需要进入到的项目路径中”
      python 1.py # 你需要执行的代码
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23

      3. 之后在`crontab`中执行该脚本文件即可





      # Others

      ## [解决非root用户crontab定时任务无法执行问题](https://jingyan.baidu.com/article/bea41d432d4967f4c51be68a.html)(不知道有没有用,按照他的配置了,正确与否不确定)



      > 修改/etc/pam.d/crond,把把所有required改成sufficient,这个对非root用户管用
      >
      > \#
      >
      > \# The PAM configuration file for the cron daemon
      >
      > \#
      >
      >
      >

      No PAM authentication called, auth modules not needed

      account sufficient pam_access.so

      account include password-auth

      session sufficient pam_loginuid.so

      session include password-auth

      auth include password-auth
      ```

尾言

又是开心的debug的半天呢(bushi)

-------------我也是有底线的哦如需更多,欢迎打赏-------------