TBDS中的Shell任务工作流可通过shell脚本调用python,也可以直接调用python脚本,以下为两种方法介绍。
一、在shell脚本中调用python脚本编写方法
1. 首先在工作流中新建shell任务
2.编写调用python的shell脚本,可参考如下call_python.sh脚本
代码语言:javascript复制#!/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
代码语言:javascript复制#!/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
b)若产生的log文件在脚本中定义为存放在当前目录,可通过页面查询log目录
c)若log文件为自己在shell或者python中定义的,则查看脚本
d)登陆任务实例运行的节点IP查看对应的日志/tmp/call_python.log或者/usr/local/lhotse_runners/tdcp/workspace/20180315115924554/20180315000000/xx.log