pipe理由cron作业创build的日志文件

我有一个cron作业运行每日复制日志文件到我的家庭文件夹。

每天都会覆盖目标文件夹中的预期文件。 我想保留以前date的日志,以便下一次将文件复制到目标文件夹时,它将保留以前date中的文件。

我怎么做?

Solutions Collecting From Web of "pipe理由cron作业创build的日志文件"

管理cron日志的最好方法是在每个作业周围都有一个包装。 包装可以做到这些事情,至少:

  • 初始化环境
  • 将stdout和stderr重定向到日志
  • 运行工作
  • 执行检查以查看作业是否成功
  • 必要时发送通知
  • 清理日志

这里是cron包装器的一个简单的骨头版本:

 #!/bin/bash log_dir=/tmp/cron_logs/$(date +'%Y%m%d') mkdir -p "$log_dir" || { echo "Can't create log directory '$log_dir'"; exit 1; } # # we write to the same log each time # this can be enhanced as per needs: one log per execution, one log per job per execution etc. # log_file=$log_dir/cron.log # # hitherto, both stdout and stderr end up in the log file # exec 2>&1 1>>"$log_file" # # Run the environment setup that is shared across all jobs. # This can set up things like PATH etc. # # Note: it is not a good practice to source in .profile or .bashrc here # source /path/to/setup_env.sh # # run the job # echo "$(date): starting cron, command=[$*]" "$@" echo "$(date): cron ended, exit code is $?" 

您的cron命令行将如下所示:

 /path/to/cron_wrapper command ... 

一旦到位,我们可以有另一个名为cron_log_cleaner作业,它可以删除旧的日志。


一个例子:

 # run the cron job from command line cron_wrapper 'echo step 1; sleep 5; echo step 2; sleep 10' # inspect the log cat /tmp/cron_logs/20170120/cron.log 

运行包装的cron作业之后,日志将包含此信息:

 Fri Jan 20 04:35:10 UTC 2017: starting cron, command=[echo step 1; sleep 5; echo step 2; sleep 10] step 1 step 2 Fri Jan 20 04:35:25 UTC 2017: cron ended, exit code is 0 

 `date +%F` 

到你的cp命令,像这样:

 cp /path/src_file /path/dst_file_`date +%F` 

所以它会将src_file复制到dst_file_2017-01-20