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。