Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache Bash_运算符成功,而python文件失败_Bash_Airflow - Fatal编程技术网

Apache Bash_运算符成功,而python文件失败

Apache Bash_运算符成功,而python文件失败,bash,airflow,Bash,Airflow,我在apache的GUI中有以下日志: *** Reading local file: /home/ubuntu/airflow/logs/risk_position/delta_risk/2020-11-25T06:38:38.444673+00:00/1.log [2020-11-25 06:52:40,950] {taskinstance.py:670} INFO - Dependencies all met for <TaskInstance: risk_position.delt

我在apache的GUI中有以下日志:

*** Reading local file: /home/ubuntu/airflow/logs/risk_position/delta_risk/2020-11-25T06:38:38.444673+00:00/1.log
[2020-11-25 06:52:40,950] {taskinstance.py:670} INFO - Dependencies all met for <TaskInstance: risk_position.delta_risk 2020-11-25T06:38:38.444673+00:00 [queued]>
[2020-11-25 06:52:40,964] {taskinstance.py:670} INFO - Dependencies all met for <TaskInstance: risk_position.delta_risk 2020-11-25T06:38:38.444673+00:00 [queued]>
[2020-11-25 06:52:40,965] {taskinstance.py:880} INFO - 
--------------------------------------------------------------------------------
[2020-11-25 06:52:40,965] {taskinstance.py:881} INFO - Starting attempt 1 of 6
[2020-11-25 06:52:40,965] {taskinstance.py:882} INFO - 
--------------------------------------------------------------------------------
[2020-11-25 06:52:40,974] {taskinstance.py:901} INFO - Executing <Task(BashOperator): delta_risk> on 2020-11-25T06:38:38.444673+00:00
[2020-11-25 06:52:40,977] {standard_task_runner.py:54} INFO - Started process 18650 to run task
[2020-11-25 06:52:41,002] {standard_task_runner.py:77} INFO - Running: ['airflow', 'run', 'risk_position', 'delta_risk', '2020-11-25T06:38:38.444673+00:00', '--job_id', '64', '--pool', 'default_pool', '--raw', '-sd', '/home/ubuntu/.local/lib/python3.6/site-packages/airflow/example_dags/risk_position.py', '--cfg_path', '/tmp/tmp1kqxd_yj']
[2020-11-25 06:52:41,003] {standard_task_runner.py:78} INFO - Job 64: Subtask delta_risk
[2020-11-25 06:52:41,024] {logging_mixin.py:112} INFO - Running %s on host %s <TaskInstance: risk_position.delta_risk 2020-11-25T06:38:38.444673+00:00 [running]> ip-************.ap-northeast-1.compute.internal
[2020-11-25 06:52:41,035] {bash_operator.py:113} INFO - Tmp dir root location: 
 /tmp
[2020-11-25 06:52:41,036] {bash_operator.py:136} INFO - Temporary script location: /tmp/airflowtmpowss08ak/delta_riskhmnyrm0e
[2020-11-25 06:52:41,036] {bash_operator.py:146} INFO - Running command: /home/ubuntu/extra/cronjobs/unify_report.sh delta_risk || exit 1 
[2020-11-25 06:52:41,042] {bash_operator.py:153} INFO - Output:
[2020-11-25 06:52:41,044] {bash_operator.py:157} INFO - delta_risk report
[2020-11-25 06:52:41,046] {bash_operator.py:157} INFO - output  /home/ubuntu/market_risk/delta_risk/output 2020-11-24delta_risk.xlsx
[2020-11-25 06:52:41,046] {bash_operator.py:157} INFO - exists /home/ubuntu/extra/cronjobs/unify_reports
[2020-11-25 06:52:41,971] {bash_operator.py:161} INFO - Command exited with return code 0
[2020-11-25 06:52:41,976] {taskinstance.py:1070} INFO - Marking task as SUCCESS.dag_id=risk_position, task_id=delta_risk, execution_date=20201125T063838, start_date=20201125T065240, end_date=20201125T065241
[2020-11-25 06:52:45,928] {local_task_job.py:102} INFO - Task exited with return code 0

实际上,脚本中的管道将屏蔽子shell中的任何错误

我猜您使用子shell只是为了将输出重定向应用于整个命令。更好的设计是将代码放入函数中,在出现致命错误时,该函数还可以执行非本地退出

fun(){
#运行每个代码以生成文件
cd“${SOURCE\u PATH\u base}/${SUB\u PATH}”
python3“$REPORT_TYPE.py”||退出1
#输出文件链接
dir=$top\u dir/输出\报告\类型
echo“$dir输出链接”
如果[-e“$dir”];则
echo“存在$dir”
其他的
#创建指向真实路径的链接
echo“无输出链接$dir”
echo“实际输出路径${OUTPATH}”
cd“${TOPDIR}/${JOBDIR}”
#这真的很奇怪,你的意思是加单引号吗?
trap`ln-s“${OUTPATH}”输出${REPORT\u TYPE}`1 2 3 15
echo“已创建输出链接$dir”
fi
#上传到gdrive
cd“${SOURCE\u PATH\u base}/${INTERAPI\u PATH}”
python3 teamdrive_control.py Market_Risk$REPORT_TYPE“${OUTPATH}/${OUT}”“${TO}”“${FILENO_FLAG}”“${SUBJECT}”退出
}
乐趣2>&1|xz-9ec>“日志/${JOBDIR}-$(日期+%s)\$REPORT_TYPE.log.xz”
陷阱
看起来真的错了;你的意思是用单引号吗?当前代码将尝试立即运行
ln-s
,并将其输出作为
陷阱运行

还要注意各种引用修复;你通常引用了所有不需要引用的东西,而把绝对需要引用的东西放在了引用之外。也许你也看到了;可能还养成了在代码上运行的习惯

这在这里并不重要,因为您无论如何都会将所有内容重定向到同一个文件,但是诊断消息通常应该重定向到标准错误。一个好的做法是包括打印诊断的脚本的名称,这样即使有脚本调用脚本等,您也可以看到它来自何处

echo“$0:β值将导致dom”>&2

脚本可能会掩盖错误。我们看不到它的来源,因此无法告诉您如何修复它。正确编写的shell脚本会将失败传播给调用方(无论之前发生了什么,错误编写的shell脚本可能会在最后退出0)。@tripleee感谢您的评论。您认为我在sh文件中创建的日志会像您提到的那样“屏蔽”吗?是的,管道的退出状态将是管道中最后一个命令的退出状态。
(
    # run each code to generate files
    cd "${SOURCE_PATH_base}/${SUB_PATH}"
    python3 $REPORT_TYPE.py || exit 1
    # output file link
    dir=$top_dir/output_$REPORT_TYPE
    echo $dir 'output link'
    if [ -e $dir ]; then
        echo 'exists' $dir
    else
        # create link to real path
        echo 'no output link' $dir
        echo 'real output path' ${OUTPATH}
        cd ${TOPDIR}/${JOBDIR}
        trap `ln -s "${OUTPATH}" "output_${REPORT_TYPE}"` 1 2 3 15
        echo 'created output link' $dir
    fi
    # upload to gdrive
    cd "${SOURCE_PATH_base}/${INTERAPI_PATH}"
    python3 teamdrive_control.py Market_Risk $REPORT_TYPE "${OUTPATH}/${OUT}" "${TO}" "${FILENO_FLAG}" "${SUBJECT}"
) 2>&1 | xz -9ec > logs/${JOBDIR}-$(date +%s)_$REPORT_TYPE.log.xz