如何从文件

时间:2017-04-28 06:55:38

标签: linux bash shell stdout stderr

我有一个shell脚本。在这个脚本中,我正在读取文件的表名并执行命令。

脚本运行正常。我能够对文件中的所有表执行命令。

shell script

#!/bin/bash

[ $# -ne 1 ] && { echo "Usage : $0 input file "; exit 1; }
args_file=$1

TIMESTAMP=`date "+%Y-%m-%d"`
touch /home/$USER/logs/${TIMESTAMP}.success_log
touch /home/$USER/logs/${TIMESTAMP}.fail_log 
success_logs=/home/$USER/logs/${TIMESTAMP}.success_log
failed_logs=/home/$USER/logs/${TIMESTAMP}.fail_log

#Function to get the status of the job creation
function log_status
{
       status=$1
       message=$2
       if [ "$status" -ne 0 ]; then
                echo "`date +\"%Y-%m-%d %H:%M:%S\"` [ERROR] $message [Status] $status : failed" | tee -a "${failed_logs}"
                #echo "Please find the attached log file for more details"
                #exit 1
                else
                    echo "`date +\"%Y-%m-%d %H:%M:%S\"` [INFO] $message [Status] $status : success" | tee -a "${success_logs}"
                fi
}

while read table ;do 
  spark-submit hive.py $table 
done < ${args_file}

g_STATUS=$?
log_status $g_STATUS "Spark ${table}"

在此脚本中,我想收集status logsstdout日志。我想分别收集文件中每个表的日志。

我想知道文件中每个表的spark-submit执行是成功还是失败。说status logs

如何为每个表单独收集stdout个文件,并将其存储在Linux中的某个位置。

我需要做些什么来实现我的成果。

1 个答案:

答案 0 :(得分:0)

确保只需将为脚本中的每个stdout实例生成的日志(table)重定向到/var/log/下的文件夹,可以将其称为{{ 1}}

myScriptLogs

如果由于某种原因无法使用mkdir -p /var/log/myScriptLogs || { echo "mkdir failed"; exit; } while read -r table ;do spark-submit hive.py "$table" > /var/log/myScriptLogs/"${table}_dump.log" 2>&1 done < "${args_file}" 创建新目录,则脚本将失败。因此,这会为mkdir/var/log下正在处理的每个表创建一个日志,您可以根据需要将其更改为

一些最佳实践是在<table_name>_dump.log中使用-r标志并双引用shell变量。

已更新答案,以便将read重定向到日志文件。