CentOS中的“触发器”需先区分场景,常见类型包括:
数据库错误日志会记录触发器执行的具体错误信息,优先检查:
# MySQL默认日志路径
tail -n 100 /var/log/mysqld.log
# MariaDB默认日志路径
tail -n 100 /var/log/mariadb/error.log
日志中若出现“语法错误”“权限不足”等关键词,可直接定位问题。
BEGIN...END
块、变量声明等);触发器执行需用户具备对应权限,检查当前用户是否有TRIGGER
权限:
SHOW GRANTS FOR 'your_user'@'localhost';
若无权限,需用root用户授权:
GRANT TRIGGER ON your_database.* TO 'your_user'@'localhost';
FLUSH PRIVILEGES;
确保crond
服务正在运行:
systemctl status crond.service
若未运行,启动服务并设置开机自启:
systemctl start crond.service
systemctl enable crond.service
通过日志确认定时任务是否被触发及失败原因:
tail -f /var/log/cron
若日志中无任务执行记录,可能是任务配置错误或服务未启动。
crontab -e
编辑当前用户的cron任务,确认格式正确(如* * * * * /path/to/command
,分 时 日 月 周+命令);/usr/bin/python3
而非python3
),避免因环境变量不同导致命令找不到。chmod +x /path/to/script.sh
PATH
),需在脚本开头显式设置(cron环境变量与用户登录环境不同):#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
echo "Current PATH: $PATH" >> /tmp/cron_env.log # 调试环境变量
inotify从Linux内核2.6.13开始支持,检查内核版本:
uname -r
若版本低于2.6.13,需升级内核。
inotify对“实例数”(max_user_instances
)和“监控文件数”(max_user_watches
)有限制,检查当前值:
cat /proc/sys/fs/inotify/max_user_instances
cat /proc/sys/fs/inotify/max_user_watches
若监控大量文件(如超过10万),需增大限制(编辑/etc/sysctl.conf
):
fs.inotify.max_user_watches=524288
fs.inotify.max_user_instances=1024
应用配置:
sysctl -p
/path/to/dir
不存在,inotify无法监听);mv
删除的文件:mv
操作会删除原文件的inode,导致inotify失效,建议改用cp
+rm
或直接监控目录(而非单个文件)。用inotifywait
测试监控是否正常:
inotifywait -rmq -e modify /path/to/watch_dir | while read event; do echo "Event: $event"; done
若命令无输出,说明监控未生效,需检查路径或系统资源(如内存不足)。
date
命令确认时间正确;systemctl restart crond
、systemctl restart mysqld
);yum update
更新系统及软件包,修复已知bug。