添加 Cron

ecflow_server 会在一个日志文件中记录所有发送给它的命令,默认文件名为 <host>.<port>.ecf.log

该日志文件的大小会随着时间显著增长。

在这个练习中我们将创建一个任务,用于定期备份并清理该日志文件。

将使用上一章节介绍的 cron 属性。定义 cron 属性的任务会无限运行,也就是一旦任务完成,将会自动重新排队自己。

关于添加 cron 的更多示例请参阅用户文档

Ecf 脚本

我们先创建一个新的脚本,clear.ecf

  1. %include <head.h>
  2. # copy the log file to the ECF_HOME/log directory
  3. cp %ECF_LOG% %ECF_HOME%/log/.
  4. # clear the log file
  5. ecflow_client --log=clear
  6. %include <tail.h>

Suite 定义

文本方式

为了简便,省略前面的节点定义。

  1. # Definition of the suite test.
  2. suite test
  3. edit ECF_INCLUDE "$ECF_HOME" # replace '$ECF_HOME' with the path to your ECF_HOME directory
  4. edit ECF_HOME "$ECF_HOME"
  5. family house_keeping
  6. task clear_log
  7. cron -w 0 22:30 # run every Sunday at 10:30pm
  8. endfamily
  9. endsuite

Python

省略部分代码

  1. import os
  2. from pathlib import Path
  3. from ecflow import Defs, Suite, Task, Family, Edit, Trigger, \
  4. Event, Complete, Meter, Time, Day, Date, Cron
  5. # ... skip ...
  6. def create_family_house_keeping():
  7. return Family("house_keeping",
  8. Task("clear_log",
  9. Cron("22:30", days_of_week=[0])))
  10. print("Creating suite definition")
  11. home = os.path.abspath(Path(Path(__file__).parent, "../../../build/course"))
  12. defs = Defs(
  13. Suite('test',
  14. Edit(ECF_INCLUDE=home, ECF_HOME=home),
  15. create_family_f1(),
  16. create_family_house_keeping()))
  17. print(defs)
  18. print("Checking job creation: .ecf -> .job0")
  19. print(defs.check_job_creation())
  20. print("Saving definition to file 'test.def'")
  21. defs.save_as_defs(str(Path(home, "test.def")))
  22. # To restore the definition from file 'test.def' we can use:
  23. # restored_defs = ecflow.Defs("test.def")

运行脚本

  1. $python test.py
  2. Creating suite definition
  3. # 4.8.0
  4. suite test
  5. edit ECF_INCLUDE '/g3/wangdp/project/study/ecflow/ecflow-tutorial-code/build/course'
  6. edit ECF_HOME '/g3/wangdp/project/study/ecflow/ecflow-tutorial-code/build/course'
  7. # ... skip ...
  8. family house_keeping
  9. task clear_log
  10. cron -w 0 22:30
  11. endfamily
  12. endsuite
  13. Checking job creation: .ecf -> .job0
  14. Saving definition to file 'test.def'

任务

  1. 修改 suite definition 文件
  2. 创建所有需要的 ecf 脚本文件。
  3. 替换 suite。
  4. ecflow_ui 有专门的窗口解释任务为何处于排队状态。选择排队的任务,点击问号图标按钮或点击 Why 标签。

    添加 Cron - 图1

  5. 手动运行任务,查看磁盘上的日志文件。

    日志文件被清空:

    1. MSG:[01:26:04 2.2.2018] chd:complete /test/house_keeping/clear_log
    2. LOG:[01:26:04 2.2.2018] complete: /test/house_keeping/clear_log
    3. LOG:[01:26:04 2.2.2018] queued: /test/house_keeping/clear_log
    4. LOG:[01:26:04 2.2.2018] queued: /test/house_keeping
    5. LOG:[01:26:04 2.2.2018] queued: /test
    6. LOG:[01:26:04 2.2.2018] queued: /
    7. MSG:[01:26:07 2.2.2018] --news=0 187 16 :wangdp [server(202,16) : *Small* scale changes :NEWS]
    8. MSG:[01:26:07 2.2.2018] --sync=0 187 16 :wangdp
    9. MSG:[01:26:09 2.2.2018] --news=0 202 16 :wangdp [:NO_NEWS]
    10. MSG:[01:26:26 2.2.2018] svr:check_pt in 0 seconds