Shell節點支持標準Shell語法,不支持交互性語法。
使用限制
Shell節點支持標準Shell語法,不支持交互性語法。
Shell節點支持Serverless資源組(推薦)或舊版獨享調度資源組執行。如需購買使用Serverless資源組,詳情請參見新增和使用Serverless資源組。
Serverless資源組上運行Shell節點時,如果您需要訪問的目標端有白名單限制,請添加Serverless資源組對應IP至目標端應用。
請勿在Shell里啟動大量子進程,由于目前Shell節點沒有資源限制,該操作可能會影響運行在該調度資源組上的其它任務運行。
如果您在開發任務時,需要特定的開發環境支持,可使用DataWorks提供的自定義鏡像功能,定制化構建任務執行所需的組件鏡像。更多信息,請參見鏡像管理。
前提條件
已創建業務流程。數據開發(DataStudio)基于業務流程執行具體開發操作,因此創建節點前需先新建業務流程,詳情請參見創建業務流程。
創建通用Shell節點
進入數據開發頁面。
登錄DataWorks控制臺,切換至目標地域后,單擊左側導航欄的 ,在下拉框中選擇對應工作空間后單擊進入數據開發。
鼠標懸停至圖標,單擊
,在新建節點對話框輸入節點名稱及路徑。單擊確認,完成節點的創建。
Shell節點使用資源
在DataWorks節點使用資源時,需要先將資源上傳至DataWorks,并通過節點引用資源的方式,將資源加載入節點運行環境后,才可以在節點中使用資源。具體操作如下。
創建資源
DataWorks支持通過新建資源或上傳已有資源兩種方式,生成DataWorks中需使用的資源,使用哪種方式請以各類型資源的實際創建界面為準。
目前可在DataWorks創建MaxCompute及EMR(E-MapReduce)資源,詳情請參見創建并使用MaxCompute資源、創建和使用EMR資源。
資源需要提交后才可被節點引用。若生產任務需使用該資源,還需將該資源發布至生產環境。詳情請參見發布任務。
節點中引用資源
您可通過引用資源的方式在節點內使用資源時,節點成功引用資源后在節點代碼最上方會顯示@resource_reference{"資源名稱"}
注釋代碼。
引用步驟如下:
打開新建的Shell節點,進入節點編輯頁面。
在數據開發左側目錄樹下找到已上傳的資源。
右鍵單擊該資源,選擇引用資源,則該資源將被引用至當前節點中。
您可在節點編輯頁面,通過編寫代碼運行該資源。
Shell節點使用調度參數
通用Shell節點中的變量不允許自定義命名,只能以$1、$2、$3...命名(參數序號由小到大,依次遞增),當參數的數量大于10時,請使用${10}的方式聲明變量。配置及使用調度參數,詳情請參見配置并使用調度參數,更多調度參數的賦值方式,請參見調度參數概述。
如上圖,在參數賦值區域為參數賦值,再進入代碼調用區域定義內置參數$1,自定義參數$2、$3。參數賦值示例如下:
內置參數$1賦值取業務時間:$bizdate。
自定義參數$2賦值取業務時間:${yyyymmdd}。
自定義參數$3賦值取業務時間: $[yyyymmdd]。
通用Shell節點僅支持使用表達式的方式為參數賦值。參數間使用一個空格隔開,并且參數取值與定義參數時的順序對應。例如,Shell節點定義的第一個參數為$1,則參數賦值區域序號第一的賦值內容$bizdate即為$1的參數取值。
如何判斷Shell自定義腳本任務是否執行成功
腳本運行成功或者失敗是根據如下進程退出碼來進行判斷的:
退出碼0:表示成功。
退出碼-1:表示進程被終止。
退出碼2:需要平臺自動重跑一次任務。
其它退出碼:表示失敗。
一個Shell任務,如果第一條命令是無效命令,那么最終結果肯定是異常的,這時后面輸入一條能有效運行的命令,結果會是成功的,具體示例如下:
#!/bin/bash
curl http://xxxxx/asdasd
echo "nihao"
這個任務在平臺上最終成功運行,因為該腳本是正常退出的。
這時,把上述命令做一個修改,最終示例如下:
#!/bin/bash
curl http://xxxxx/asdasd
if [[ $? == 0 ]];then
echo "curl success"
else
echo "failed"
exit 1
fi
echo "nihao"
這樣最終這個腳本會運行失敗。
通過Shell腳本里面訪問OSSUtils
OSSUtils使用路徑、全路徑,默認有安裝。
/home/admin/usertools/tools/ossutil64。
OSSUtils常用命令可參考:常用命令。
配置用戶名密碼config可自行配置,比如將config基于運維助手將配置文件上傳配置到該目錄下:/home/admin/usertools/tools/myconfig。
[Credentials]
language = CH
endpoint = oss.aliyuncs.com
accessKeyID = your_accesskey_id
accessKeySecret = your_accesskey_secret
stsToken = your_sts_token
outputDir = your_output_dir
ramRoleArn = your_ram_role_arn
命令格式如下:
#!/bin/bash
/home/admin/usertools/tools/ossutil64 --config-file /home/admin/usertools/tools/myconfig cp oss://bucket/object object
if [[ $? == 0 ]];then
echo "access oss success"
else
echo "failed"
exit 1
fi
echo "finished"
后續操作
若Shell節點需要周期性調度,您需要定義節點的調度屬性,并通過任務發布流程將任務發布至生產環境。配置節點調度屬性,詳情請參見配置節點調度屬性,發布任務至生產環境,詳情請參見發布任務。
相關文檔
了解如何在Shell節點使用Python 2或Python 3命令運行Python腳本:詳情請參見Shell類型節點運行Python腳本。
了解如何在Shell節點使用OSSUtils工具:詳情請參見Shell類型節點使用OSSUtils工具。