我有一个bash脚本可以执行一些数据复制和一些转换。该脚本可以运行几分钟,具体取决于文件大小。与此同时,另一个进程可以触发此脚本来复制其文件。
我想为每次运行脚本维护单独的日志。有可能吗?
答案 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文件(锁定文件类型)在脚本启动时(如果它尚未创建,请先检查它是否未创建或存在,然后创建它或退出程序,考虑到它正在运行)并且每次脚本完成时(在上一次成功命令之后)你可以删除它,如果你的下一次运行来看到那个文件就在那里它应该从脚本中退出。