添加 Cron
ecflow_server 会在一个日志文件中记录所有发送给它的命令,默认文件名为 <host>.<port>.ecf.log。
该日志文件的大小会随着时间显著增长。
在这个练习中我们将创建一个任务,用于定期备份并清理该日志文件。
将使用上一章节介绍的 cron 属性。定义 cron 属性的任务会无限运行,也就是一旦任务完成,将会自动重新排队自己。
关于添加 cron 的更多示例请参阅用户文档。
Ecf 脚本
我们先创建一个新的脚本,clear.ecf。
%include <head.h># copy the log file to the ECF_HOME/log directorycp %ECF_LOG% %ECF_HOME%/log/.# clear the log fileecflow_client --log=clear%include <tail.h>
Suite 定义
文本方式
为了简便,省略前面的节点定义。
# Definition of the suite test.suite testedit ECF_INCLUDE "$ECF_HOME" # replace '$ECF_HOME' with the path to your ECF_HOME directoryedit ECF_HOME "$ECF_HOME"family house_keepingtask clear_logcron -w 0 22:30 # run every Sunday at 10:30pmendfamilyendsuite
Python
省略部分代码
import osfrom pathlib import Pathfrom ecflow import Defs, Suite, Task, Family, Edit, Trigger, \Event, Complete, Meter, Time, Day, Date, Cron# ... skip ...def create_family_house_keeping():return Family("house_keeping",Task("clear_log",Cron("22:30", days_of_week=[0])))print("Creating suite definition")home = os.path.abspath(Path(Path(__file__).parent, "../../../build/course"))defs = Defs(Suite('test',Edit(ECF_INCLUDE=home, ECF_HOME=home),create_family_f1(),create_family_house_keeping()))print(defs)print("Checking job creation: .ecf -> .job0")print(defs.check_job_creation())print("Saving definition to file 'test.def'")defs.save_as_defs(str(Path(home, "test.def")))# To restore the definition from file 'test.def' we can use:# restored_defs = ecflow.Defs("test.def")
运行脚本
$python test.pyCreating suite definition# 4.8.0suite testedit ECF_INCLUDE '/g3/wangdp/project/study/ecflow/ecflow-tutorial-code/build/course'edit ECF_HOME '/g3/wangdp/project/study/ecflow/ecflow-tutorial-code/build/course'# ... skip ...family house_keepingtask clear_logcron -w 0 22:30endfamilyendsuiteChecking job creation: .ecf -> .job0Saving definition to file 'test.def'
任务
- 修改 suite definition 文件
- 创建所有需要的 ecf 脚本文件。
- 替换 suite。
ecflow_ui 有专门的窗口解释任务为何处于排队状态。选择排队的任务,点击问号图标按钮或点击 Why 标签。

手动运行任务,查看磁盘上的日志文件。
日志文件被清空:
MSG:[01:26:04 2.2.2018] chd:complete /test/house_keeping/clear_logLOG:[01:26:04 2.2.2018] complete: /test/house_keeping/clear_logLOG:[01:26:04 2.2.2018] queued: /test/house_keeping/clear_logLOG:[01:26:04 2.2.2018] queued: /test/house_keepingLOG:[01:26:04 2.2.2018] queued: /testLOG:[01:26:04 2.2.2018] queued: /MSG:[01:26:07 2.2.2018] --news=0 187 16 :wangdp [server(202,16) : *Small* scale changes :NEWS]MSG:[01:26:07 2.2.2018] --sync=0 187 16 :wangdpMSG:[01:26:09 2.2.2018] --news=0 202 16 :wangdp [:NO_NEWS]MSG:[01:26:26 2.2.2018] svr:check_pt in 0 seconds
