【问题标题】:Add string to default SAS log file name from bash script从 bash 脚本将字符串添加到默认 SAS 日志文件名
【发布时间】:2018-03-16 05:13:09
【问题描述】:

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

【问题讨论】:

  • 如果上面第一个代码按照你描述的方式工作,那说明-o标签后面的参数是输出日志的目录,而不是文件名,好像是与-s 之后的参数相同,其中扩展名.sas 被.log 替换。到目前为止我的假设。但是随后您引入了其他类型的论点:-t,-log,无需解释。由于我们没有batchsas.sh 的来源,我们不知道这些选项在做什么,如果您不提供有关batchsas.sh 参数的更多信息,我们将无法为您提供进一步的帮助
  • 什么是 sasbatch.sh ?为什么不直接调用 sas.exe?这与使用网格有关吗?
  • @Tom sasbatch.sh 是我无法直接访问的内部脚本,但有人告诉我要指向我的 shell 脚本。它可能与使用网格有关,是的。 @PierreFrançois -log 显然是从命令行调用时 SAS 通常用于此目的的运算符。我尝试了它,因为我能找到的大多数网站都含糊其辞地使用它,但它似乎不适用于 batchsas 脚本。 -t 同样是我在打猎时遇到的。
  • 啊,解决了。感谢您指出 sasbatch.sh 脚本中定义的选项;我一直假设这只是使用已经存在的运算符。

标签: bash unix sas batch-processing


【解决方案1】:

我会添加以下命令:

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

最好将此命令添加到“batchas.sh”脚本中,但如果不可能,您可以在每个带有新日志文件的“batchas.sh”脚本调用之前添加此行。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 2011-03-11
    • 1970-01-01
    相关资源
    最近更新 更多