为了让之后的人少走弯路

#cron 日志按日期划分

先说结果的例子:

1
2
3
4
5
6
7
8
ONNS_HOME=/Users/onns
ONNS_ROOT=/Users/onns/Onns
ONNS_CONFIG_DIR=/Users/onns/Onns/code/config/bash
ONNS_PLATFORM=macmini
cron_log_dir=/Users/onns/Onns/code/log/cron
30 * * * * zsh /Users/onns/Onns/code/bash/oclear >>${cron_log_dir}/out-${ONNS_PLATFORM}-`date "+\%Y\%m"`.log 2>>${cron_log_dir}/err-${ONNS_PLATFORM}-`date "+\%Y\%m"`.log
0 22 * * * zsh /Users/onns/Onns/code/bash/obackup >>${cron_log_dir}/out-${ONNS_PLATFORM}-`date "+\%Y\%m"`.log 2>>${cron_log_dir}/err-${ONNS_PLATFORM}-`date "+\%Y\%m"`.log
*/10 * * * * /Users/onns/Downloads/github/ddns/ddns >>${cron_log_dir}/out-${ONNS_PLATFORM}-`date "+\%Y\%m"`.log 2>>${cron_log_dir}/err-${ONNS_PLATFORM}-`date "+\%Y\%m"`.log

日期很好拿,通过date +%Y%m就拿到了,但是想要写在文件名里需要注意几点:

  1. 不能写在变量里,不知道是不是我写的有问题,我试过如下的写法都失败了:

    1
    2
    3
    log_date=$(date +%Y%m)
    log_date=`date +%Y%m`
    log_date=`date "+\%Y\%m"`
  2. %需要转义(下面这种写法我试过也不行):

    1
    * * * * * /Users/onns/Downloads/github/ddns/ddns >>${cron_log_dir}/out-${ONNS_PLATFORM}-`date +%Y%m`.log 2>>${cron_log_dir}/err-${ONNS_PLATFORM}-`date +%Y%m`.log

#TODO

  • 总感觉有通过变量的方式定义时间日期的方法,不然现在这种太呆了。

#cron 使用变量

很奇怪,不能定义多级变量,不然会索引不到。

1
2
3
4
5
6
7
# 这样可以
ONNS_HOME=/Users/onns
ONNS_ROOT=/Users/onns/Onns

# 这样就不行
ONNS_HOME=/Users/onns
ONNS_ROOT=$ONNS_HOME/Onns

#tips

  • cron是通过sh来运行脚本的,在一切环境变量之前,如果你在.zshrc或者.bashrc中定义了一些自己的东西,那么恭喜你,用不了。