如何将Cron调度的Python脚本日志输出至Syslog?
如何将Cron调度的Python脚本日志输出到Syslog
这里提供两种可靠的实现方式,按需选择:
方法一:修改Python代码,让logging直接写入Syslog
这种方式更可控,能让logging模块直接将日志发送到Syslog,不依赖Cron的输出转发逻辑。
修改你的Python脚本,添加Syslog处理器:
import logging from logging.handlers import SysLogHandler # 初始化Syslog处理器,默认连接本地Syslog服务(路径为/dev/log) syslog_handler = SysLogHandler(address='/dev/log') # 沿用你原来的日志格式 formatter = logging.Formatter("[%(module)s] %(message)s") syslog_handler.setFormatter(formatter) # 配置根日志器 logger = logging.getLogger() logger.setLevel(logging.INFO) logger.addHandler(syslog_handler) # 原业务逻辑部分 try: # ... 你的数据库写入代码 except Exception as e: logger.info(f'error while writing: {e}')
配置完成后,无论脚本直接运行还是通过Cron调度,日志都会直接写入Syslog,可在/var/log/syslog或/var/log/messages(依系统而定)中查看。
方法二:修改Cron命令,转发脚本输出到Syslog
如果不想改动Python代码,可以借助系统的logger工具,将脚本的标准输出/错误输出转发到Syslog。
将Cron配置修改为:
*/10 * * * * /usr/bin/python3 /home/user/FillDatabase.py 2>&1 | /usr/bin/logger -t "FillDatabase"
2>&1:把脚本的错误输出(stderr)合并到标准输出(stdout)logger -t "FillDatabase":给转发到Syslog的日志加上FillDatabase标签,方便后续筛选查看
验证方式
配置完成后,可手动执行脚本或等待Cron触发,然后通过以下命令查看日志:
tail -f /var/log/syslog | grep FillDatabase
内容的提问来源于stack exchange,提问作者user12479200
相关产品推荐
相关产品推荐

