TBDS工作流调度python脚本示例及排错方法

TBDS中的Shell任务工作流可通过shell脚本调用python,也可以直接调用python脚本,以下为两种方法介绍。

一、在shell脚本中调用python脚本编写方法

1. 首先在工作流中新建shell任务

2.编写调用python的shell脚本,可参考如下call_python.sh脚本

#!/bin/bash
py_script=$1
Time=$(date +"%Y%m%d%H%M")
shell_log=/tmp/call_python.log.$Time
cmd_start(){
 py_name=$1
 py=$(which python)
 $py $py_name >>${shell_log} 2>&1
}
cmd_start ${py_script}

由于执行脚本的用户为admin普通用户,若shell或者python脚本中有生成文件需要注意存放的目录路径,一般只能将文件存放至/tmp或者/home/admin目录下,否则会有权限问题

3. 将shell脚本及编写的python脚本转换为unix格式

转换命令:dos2unix call_python.sh xxx.py

4. 将shell脚本及python脚本合并打为zip包,通过页面上传

5. 填写shell脚本名及需要调用的python名

6. 发布运行,查看日志输出是否报错

二、直接调用python脚本的方法

1.同样新建工作流shell任务

2.编写python脚本,如下mktest.py

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import os
os.mkdir("/home/admin/tmp")
file_object = open('/home/admin/tmp/easy_testfile.txt','w')
print("hhhhhhhhhhhh,test!")
try:
 all_the_text = file_object.write('hello,shell test!')
finally:
 file_object.close( )

由于执行脚本的用户为admin普通用户,若shell或者python脚本中有生成文件需要注意存放的目录路径,一般只能将文件存放至/tmp或者/home/admin目录下,否则会有权限问题

注意:因为平台是直接./mktest.py执行,所以在python脚本的头部需要写明解释器(shell调用的可以不写),“#!/usr/bin/env python”,加入解释器后即可正常执行python脚本

3. 将python脚本转换为unix格式

转换命令:dos2unix mktest.py

4. 将python脚本打为zip包,通过页面上传

5. 填写python脚本名

6. 发布运行,通过页面查看日志是否有报错

三、排错方法

1. 右键点击任务的”查看运行状态”,进入界面点击”查看”

2. 若shell或python脚本中有直接print调试信息而没有将信息写入到文件中,则可以直接在页面的最后查看到信息

3.若脚本中把信息打印log文件中,则可以登录到服务器上查看运行日志(关键为查找到执行脚本的节点ip及log文件所在的目录)

a) 根据以下步骤,找到任务实例运行所在的runner节点ip

此处即为任务实例运行所在的节点IP

b)若产生的log文件在脚本中定义为存放在当前目录,可通过页面查询log目录

c)若log文件为自己在shell或者python中定义的,则查看脚本

d)登陆任务实例运行的节点IP查看对应的日志/tmp/call_python.log或者/usr/local/lhotse_runners/tdcp/workspace/20180315115924554/20180315000000/xx.log

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券