从bash脚本中将字符串添加到默认SAS日志文件名

时间:2018-03-15 20:16:18

标签: bash unix sas batch-processing

我正在尝试构建一个简单的bash脚本,以便在工作时自动运行一些月度SAS程序。我遇到的问题是我们希望根据程序运行的那天保存日志,以防底层数据发生变化,但我找不到将日期附加到日志文件的方法。

我的基本代码如下:

#!/bin/bash

month=`date +%Y%m -d "1 month ago"` #Previous month for log folder
sysdate=`date "+%Y_%m_%d"` #today's date

sasbatdir=/c01/sasdata/public
sasdir=/n04/directory-where-programs-are
saslog=/n04/directory-where-programs-are/Log/$month

cd $sasdir

$sasbatdir/batchsas.sh -s PROGRAM_01.sas -o $saslog -k traditional
$sasbatdir/batchsas.sh -s PROGRAM_02.sas -o $saslog -k traditional
$sasbatdir/batchsas.sh -s PROGRAM_03.sas -o $saslog -k traditional
... etc

exit 0

所以上面的工作,但它显然只输出名为PROGRAM_01.log,PROGRAM_02.log等格式的日志文件,下次在该月运行脚本时会被覆盖。

我尝试过的事情:

$sasbatdir/batchsas.sh -s PROGRAM_01.sas -o $saslog/PROGRAM_01_"$sysdate".log -k traditional  

$sasbatdir/batchsas.sh -s PROGRAM_01.sas -log $saslog/PROGRAM_01_"$sysdate".log -k traditional  

不起作用。 nohup返回“未找到输出目录”错误,似乎将日志名称视为目录而不是文件。

$sasbatdir/batchsas.sh -s PROGRAM_01.sas -o -t 1 > $saslog/PROGRAM_01_"$sysdate".log -k traditional 2>&1  

主要工作,但返回两个日志文件:一个具有正确的名称,但只包含nohup输出,另一个包含SAS日志,但同时包含日期(格式错误)和附加的工作ID。删除2>$1会阻止写入。我老实说第二个,如果我能弄清楚如何在没有第一个的情况下制作它,不过我更喜欢坚持 Program_Name_YYYY_MM_DD.log 格式。

如果它是相关的,我用来测试程序的命令是nohup /n04/directory-where-program-is-stored/test_script.sh

1 个答案:

答案 0 :(得分:0)

我会添加以下命令:

exec > "$saslog/PROGRAM_01_${sysdate}.log" 2>&1

最好在“batchas.sh”脚本中添加此命令,但如果不可能,则可以在每次使用新日志文件调用“batchas.sh”脚本之前添加此行。

此命令会将重定向到指定的文件,无论脚本是从命令行crontab还是nohup启动的。