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工具。