在 Linux 里,syslog 本身不是“写脚本”的对象,通常是:
下面分几种常见场景给你讲。
logger 命令(推荐)logger 是专门往 syslog 写日志的工具。
#!/bin/bash
logger -p local0.info -t myscript "脚本开始执行"
echo "做点事情..."
logger -p local0.err -t myscript "发生错误了"
参数说明:
-p:优先级(facility.level)
user.info, local0.warning, local0.err-t:tag(日志里会显示)/var/log/messages 或 journaldrsyslog 配置:
# /etc/rsyslog.d/myscript.conf
local0.* /var/log/myscript.log
重启 rsyslog:
systemctl restart rsyslog
脚本:
logger -p local0.info -t myscript "hello syslog"
日志就会进:
/var/log/myscript.log
#!/bin/bash
LOG=/var/log/myscript.log
grep "ERROR" $LOG | mail -s "错误告警" admin@example.com
journalctl -t myscript --since "1 hour ago"
脚本示例:
#!/bin/bash
count=$(journalctl -t myscript --since "10 min ago" | grep -c "ERROR")
if [ "$count" -gt 0 ]; then
echo "发现 $count 个错误"
fi
⚠️ 不推荐新手用,容易出问题
# /etc/rsyslog.d/trigger.conf
local0.err ^/usr/local/bin/alert.sh
alert.sh:
#!/bin/bash
read msg
echo "$msg" | mail -s "Syslog Alert" admin@example.com
Facility:
userlocal0 ~ local7auth, cron, daemonLevel(低→高):
debug < info < notice < warning < err < crit < alert < emerg
#!/bin/bash
logger -p local0.info -t test "hello syslog"
# /etc/rsyslog.d/test.conf
local0.* /var/log/test.log
systemctl restart rsyslog
cat /var/log/test.log
如果你能告诉我:
我可以直接给你一套可跑的脚本。