我正在尝试构建一个简单的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