UiPath-定时任务原理
缘起
接触过我本人的朋友一定听过机器人工作模式是007的这个梗。经历了今年的疫情以及意外的年假,愈发觉得机器人定时任务的重要性,尤其是在由于突发情况下维护人员不能及时响应时,这个功能可以保证流程的基本运行。
工具
接触过公司域账号管理或者脚本管理的朋友,一定听说过Windows的Task Scheduler和Linux系统的Cron这两员大将,他们可以对各项工作的进行精确到秒的定时。
在UiPath Orchestrator(中控台),是使用Corn表达式实现定时运行的,而没有购买中控台的朋友可以用cmd+Task Scheduler的官方漏洞实现,下面就简单介绍工作原理。
有Orchestrator实现方法
最简单的当然是在网页UI上使用,旧版此功能叫Schedule,新版更名Trigger,常用就是进行Minutes,Hourly,Daily,Weekly,Monthly的定时设定,相信能看到这里的朋友都清楚常规操作,这里主要讲讲最下面的Advenced。
就像UiPath自带功能无法满足所有功能点一样,业务需求总有常规方法覆盖不到的点。想象一个要求在每天8-17时的范围内每个小时运行一次的unattended流程,虽然使用默认的定时方式创建十个定时也可以,但无论是创建还是后期维护都会比较麻烦。这个时候就要使用简洁的Corn Expression进行Advenced设置。Corn表达式有七个域:
功能 | 必须 | 值范围 | 合法字符 |
---|---|---|---|
秒 | 是 | 0-59 | ,-*/ |
分 | 是 | 0-59 | ,-*/ |
时 | 是 | 0-23 | ,-*/ |
日 | 是 | 1-31 | ,-*/LW |
月 | 是 | 1-12或JAN-DEC | ,-*/ |
周 | 是 | 1-7或MON-SUN | ,-*/L# |
年 | 否 | 空或“yyyy”格式年份 | ,-*/ |
下面是Corn合法字符的含义与相应举例: |
- *,含义同通配符中星号,代表所有合法值。
如0 0 0 1 1 ?,代表每年一月一日零点零分零秒触发 - ?,这个符号通俗的解释是“我并不关心该域是什么”。需要注意的是此符号只能用在日和周域但是不能在这俩域同时使用,这里只需要记住在日和周两者间只要其中一个有指定值,另一个一定要填?就好。
如0 0 0 ? 1 1,代表每年一月的每个周一零点零分零秒触发 - ,,作用是给特定域指定多个连续或不连续的值
如0 0 0,12 1 1 ?,代表每年一月一日零点零分零秒和代表每年一月一日十二点零分零秒分别触发 - /,用于指定特定间隔时间的多次运行方式
如0/10 0 0 1 1 ?,代表代表每年一月一日零点零分每十秒钟触发 - –,作用是给特定域指定一个连续的时间范围
如0 0 18-1 * * ?,代表从晚六点到凌晨一点每个小时零分零秒触发 - L,代表特定域的最后一个合法值,仅用在日与周域
如0 0 0 L * ?,代表在每个月最后一天的零点零分零秒触发
*值得一提的是,当在周使用L时,在Orchestrator 2018.4.3版本中,不可以单独使用L,而需要以数字或者周缩写的形式加L来表示,而且周日也只能使用SUNL的形式表达而不能像其他日一样使用类似1L的形式。如0 0 0 ? * SUNL,代表每个月最后一个周日的零时零分零秒触发 - W,代表Working day既Mon-Fri,仅能用在日域中。
如0 0 0 15W * ?,代表每个月离15号最近的一个双休制工作日的零时零分零秒触发 - #,代表制定月份第几周的第几天,仅能用于周域。2#1代表第一个周二
如0 0 0 ? * 2#1,代表每个月第一个周二的零时零分零秒触发
无Orchestrator实现方法
新版的UiPath会在attended产品提供一个定时提醒。。只能提醒不能运行,因为这个功能是为人机结合场景设计的,所以这里不吐槽它。另外水一下UiPath产品的一个原理,当你在电脑里面安装了UiPath的Studio,其实你是安装了三个东西;除了Studio,另外俩一个是默默干活的执行者,一个是时刻准备听从中控台安排的指挥者,这俩缺了谁机器人都得罢工。而cmd,就是作为武林至尊的操作系统点谁谁干活的金手指。
了解了这些背景,那么cmd+Task Scheduler的原理实际就是使用bat的形式记录下唤醒UiPath执行者程序的命令,然后使用Task Scheduler去定时运行。下面讲讲怎么做:
- 找到UiPath执行者位置。一般就是在你现在使用的UiPath版本根目录下面,叫UiRobot.exe,实在找不到的朋友可以用这个名字全盘搜索。拿到全路径,如C:\Users\XXXXX\AppData\Local\UiPath\app-19.2.0\UiRobot.exe
- 复制目标项目的Main文件全路径,如C:\Users\XXX\Documents\UiPath\DemoProject\Main.xaml
- 新建一个txt,输入
call C:\Users\XXXXX\AppData\Local\UiPath\app-19.2.0\UiRobot.exe /f C:\Users\XXX\Documents\UiPath\DemoProject\Main.xaml
- 把txt文件后缀改成bat
- 打开Task Scheduler,操作->创建任务
- 在常规选项卡命名;触发器选项卡新建定时设定;操作选项卡新建操作,这里填入bat文件地址。
- 搞定
喜欢尝试的朋友可以动手玩玩,这些还可以延伸出很多玩法,比如传入argument,比如在cmd里添加代码隐藏那个丑丑的大黑框;同样的,这种方法不仅仅可以定时运行UiPath的流程,原理已经讲过,其他的可运行的代码都可以尝试。