导致crontab定时任务不生效问题可能的原因非常多
首先,排查一些可能会导致问题出现的简单原因。
1.Linux的时间与互联网时间不一致
2.定时执行的.sh文件无执行权限
3.crontab进程未启动
4.定时任务重定向日志的路径不存在
5.环境变量问题
6.没有写绝对路径
通过排查,一一否定了上述所有可能,不是某个定时任务有问题,而是所有定时任务均不生效。
继续查看crontab的日志
tail -f /var/log/cron
Dec 3 08:30:01test crond[21199]: (root) FAILED to open PAM security session (拒绝权限)
可以看到确实有报错,但是没有具体报错的原因,只知道是PAM验证有问题。
通过查阅网上的文章将/etc/pam.d/crond
中的session required pam_loginuid.so
required改为sufficient可以解决。经测试,确实成功了,但是文章没有说明原因,其他机器也是相同设置crontab却没有问题,说明这里不是根本原因,这里涉及pam模块认证的知识。
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so。PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下)
pam验证控制类型。
1、required验证失败时仍然继续,但返回Fail(用户不会知道哪里失败)。
2、requisite验证失败则立即结束整个验证过程,返回Fail。
3、sufficient验证成功则立即返回,不再继续,否则忽略结果并继续。
4、optional无论验证结果如何,均不会影响(通常用于session类型)。
可以看到这里是通过改为sufficient验证成功则立即返回,不再继续来达到忽略报错的目的,但是这样做有一定的风险。
继续查看系统日志var/log/secure
tail -f var/log/secure
Dec 3 15:19:01 hdyy1 crond[25439]: pam_limits(crond:session): Could not set limit for 'nofile': 不允许的操作
可以看到是nofile参数有问题,查看该参数的配置文件
cat vi /etc/security/limits.d/90-nproc.conf
* soft nproc 196605
root soft nproc unlimited
* soft nofile 19660500
* hard nofile 19660500
* soft core 512000
* hard core 512000
可以看到此时该参数值为19660500,超出了系统的最大可设置值,将参数改为196605后crontab定时任务生效。