shell 保存来自多个sh脚本的单个日志文件

0tdrvxhp  于 2023-01-05  发布在  Shell
关注(0)|答案(1)|浏览(150)

我有两个sh脚本,它们可以相应地保存日志文件,但是我想创建另一个sh来调用它们。
他们使用的属性文件包含3个日志函数
我的第一个sh(bteq.sh)在Teradata中创建一个表

#!/bin/bash

source "/valdc_procs/properties/general_config_file"

exec_logs "/valdc_procs/logs/" "BTEQ_VALDC_PROCS"

echo "INFO : Starting table creation"
function exec_btqe (){

bteq<<EOF 2>&1

.logmech LDAP
.LOGON ${ipServerPR}/${userNamePR},${passwordPR};

.SET TITLEDASHES OFF;
.SET WIDTH 2000
.SET SEPARATOR ';'

SELECT 1
FROM DBC.TABLES
WHERE DatabaseName = ''
  AND TableName = ''
  AND TableKind = 'T';

.IF ACTIVITYCOUNT = 0 THEN .GOTO CreateNewTable;

DROP TABLE  ;

.LABEL CreateNewTable;
CREATE MULTISET TABLE xpto AS (
SELECT
  ...
   )
WITH DATA;

.LOGOFF;
.QUIT;
EOF
}
exec_btqe

#it gets the rc of the last command if it's an error
rc_result "Error creating table " "/valdc_procs/logs/" "BTEQ_VALDC_PROCS" 

#it logs the process when there were no errors
log_output "/valdc_procs/logs/" "BTEQ_VALDC_PROCS" 
exit $rc

第二个sh(tdch.sh)将该表导出到一个文件

#!/bin/bash

source "/valdc_procs/properties/general_config_file"

exec_logs "/valdc_procs/logs/" "TDCH_VALDC_PROCS"

hadoop jar $TDCH_JAR com.teradata.connector.common.tool.ConnectorImportTool \
        -libjars $LIB_JARS \
        -Dmapred.job.queue.name=default \
        -Dtez.queue.name=default \
        -Dmapred.job.name=TDCH \
        -classname com.teradata.jdbc.TeraDriver \
        -url jdbc:teradata://$ipServer/logmech=ldap,database=$database,charset=UTF16 \
        -jobtype hdfs \
        -fileformat textfile \
  -separator ',' \
  -enclosedby '"' \
        -targettable ${targetTable} \
        -username ${userName} \
        -password ${password} \
        -sourcequery "select * from ${database}.${targetTable}" \
        -nummappers 1 \
  -sourcefieldnames "" \
  -targetpaths ${targetPaths}
 
#it gets the rc of the last command if it's an error
rc_result "Error exporting the file " "/valdc_procs/logs/" "TDCH_VALDC_PROCS" 

echo "INFO : Moving file from HDFS to the FileSystem"
hdfs dfs -copyToLocal ${targetPaths}/"part-m-00000" ${targetFileSystemPath}/ARQ_VALDC_PROCS_OPBK_$TIMESTAMP
rc_result "Error moving the file " "/valdc_procs/logs/" "TDCH_VALDC_PROCS" 
echo "INFO : File Moved Arquivo movido com sucesso"

#it logs the process when there were no errors
log_output "/valdc_procs/logs/" "TDCH_VALDC_PROCS" 
exit $rc

当我单独运行每个sh时,这个日志进程工作正常,但是现在我希望让另一个sh调用它们。
但是我不确定如何获取他们命令(bteq.sh和www.example.com)的rctdch.sh并保存在单个日志文件中

tez616oj

tez616oj1#

我不能100%确定是否理解您的需求,但这可能会解决您的问题:

#!/bin/bash

logfile="/tmp/somefile.txt"

bteq.sh
status_bteq=$?

tdch.sh
status_tdch=$?

echo "Status bteq: $status_bteq" >"$logfile"
echo "Status tdch: $status_tdch" >>"$logfile"

如果你只想要返回代码,没有任何其他文本,你可以这样做:

#!/bin/bash

logfile="/tmp/somefile.txt"

bteq.sh
echo "$?" >"$logfile"

tdch.sh
echo "$?" >>"$logfile"

相关问题