Logstash YAML配置文件调度任务失效问题:每日两次执行配置不生效
排查Logstash JDBC调度配置问题
你的问题核心在于trigger模块的schedule语法错误,Logstash的JDBC Input插件并不支持你写的daily => at => [...]这种嵌套配置格式,而且schedule参数需要传入合法的Cron表达式或Rufus-Scheduler兼容的字符串,错误的语法会导致Logstash无法解析配置,自然调度任务无法生效。
错误原因分析
你当前的trigger块写法既不符合YAML语法规范,也不满足JDBC插件的参数要求:
trigger => { schedule => daily => at => [ "18:00","06:00"] }
这种写法会被YAML解析器判定为语法错误,直接导致配置加载失败。
正确的配置方案
你可以通过两种合法方式实现每日6点和18点的调度:
方式1:使用Cron表达式
Cron表达式格式为分 时 日 月 周,对应每日6点、18点执行的表达式是0 6,18 * * *,配置如下:
input { jdbc{ clean_run => true jdbc_driver_library => "../config/postgresql-42.2.23.jar" jdbc_driver_class => "org.postgresql.Driver" trigger => { schedule => "0 6,18 * * *" } statement => 'SELECT tenant_id as id , full_name , email , phone FROM public."Tenants" ' use_column_value => true tracking_column => "id" } } output { elasticsearch { ... } }
方式2:使用Rufus-Scheduler风格的自然语言字符串
如果觉得Cron表达式不够直观,也可以用更易读的Rufus-Scheduler格式:
trigger => { schedule => "every day at 06:00 and 18:00" }
额外注意事项
- 确认Logstash服务器的系统时区与你预期的一致(比如UTC或本地时区),否则调度时间会出现偏差。
- 可以先用
logstash -f your-config.conf --config.test_and_exit命令测试配置文件的合法性,避免语法错误导致服务启动失败。 - 你设置了
clean_run => true,这会导致每次执行都从头同步数据,若需要增量同步,建议将该参数改为false,并确保tracking_column的配置逻辑正确。
内容的提问来源于stack exchange,提问作者Afik Menashe
相关产品推荐
相关产品推荐

