维护每次运行bash脚本的日志

时间:2018-02-11 13:58:06

标签: bash shell logging sh

我有一个bash脚本可以执行一些数据复制和一些转换。该脚本可以运行几分钟,具体取决于文件大小。与此同时,另一个进程可以触发此脚本来复制其文件。

我想为每次运行脚本维护单独的日志。有可能吗?

2 个答案:

答案 0 :(得分:0)

您可以将日志写入名称基于以下内容的文件:

  • 运行脚本时的当前日期
  • 您计划实例的当前PID

这应该足以确保程序的每个实例都有自己的日志文件。

这是一个小例子:

pid=$(echo $$) # Current instance PID
date=$(date +%s) # Seconds since Epoch
logfile="myscript.$date.$pid.log"
echo "I'm a log" > $logfile
echo "I'm another log" >> $logfile

如果要包含触发脚本的进程名称,可以将其作为参数传递给脚本,如下所示:

<强> myscript.sh

parent="$1"
pid=$(echo $$)
date=$(date +%s)
logfile="myscript.$date.$pid.$parent.log"
echo "I'm a log" > $logfile
echo "I'm another log" >> $logfile

您可以像这样调用此脚本:

sh myscript.sh parent_script_name

它会创建一个与此类似的文件:

myscript.1518358314.85866.parent_script_name.log

答案 1 :(得分:0)

以下是一个示例脚本(我为一个示例创建),其日志将根据每次运行时的日期和时间写入日志文件:

cat check_script.ksh
CURRENT_TIME=$(date +%d-%m-%Y-%H:%M-%S)
echo "Running copy command now..." > "$CURRENT_TIME.txt"
## cp command here......
echo "Running another comand now....." >> "$CURRENT_TIME.txt"
## Bla bla bla
echo "Scrpit is completed..."  >> "$CURRENT_TIME.txt"

编辑: 另外,要检查您的脚本是否已经运行,请让OLD学校逻辑创建Watch Dog文件(锁定文件类型)在脚本启动时(如果它尚未创建,请先检查它是否未创建或存在,然后创建它或退出程序,考虑到它正在运行)并且每次脚本完成时(在上一次成功命令之后)你可以删除它,如果你的下一次运行来看到那个文件就在那里它应该从脚本中退出。