如何在一个月的最后一天运行Cronjob脚本

时间:2020-01-09 10:45:54  来源:igfitidea点击:

如何在一个月的最后一天在Linux或者Unix bash shell上执行脚本?
如何在一个月的最后一天在Linux或者类似Unix的系统上运行磁盘使用情况或者自定义报告shell/perl/python脚本?
您需要使用date命令来确定明天是否是下个月的第一天。
如果为true,则可以运行脚本。

TZ变量

TZ是Linux或者类似Unix的系统上的时区环境变量。

TZ环境变量告诉诸如ctime(3)系列之类的函数以及诸如date之类的程序,时区和夏令时规则是什么。
例如,格林威治标准时间可以定义如下:

TZ ='GMT'

您可以将TZ设置如下,以从当前日期(+%d)开始获取明天:TZ = GMT-24 date +%d`

我如何找出明天的日期?

语法如下:

# CDT
TZ=CDT-24 date +%d
 
#PST
TZ=PST-24 date +%d
 
#EDT
TZ=PST-24 date +%d
 
 
#IST
TZ=IST-24 date +%d

示例:Shell脚本

#!/bin/bash
# Purpose: Tell if it is last day of a month
# Author:  <www.theitroad.local> under GPL v2.x+
# --------------------------------
 
# Find tomorrow day in IST time zone 
day=$(TZ=IST-24 date +%d)
 
# Compare it
# If both are 1 means today is the last day of a month
if test $day -eq 1; then
   echo "Last Day of a Month"
else
   echo "Noop"  
fi

如下运行:

$ date
$ ./script

输出示例:

Fri May 31 12:35:16 IST 2014
Last Day of a Month

再尝试一次:

$ date
$ ./script
Tue Aug  4 01:04:48 IST 2014
Noop

创建包装脚本

假设您要找出一个月的最后一天的磁盘使用情况。
您有一个名为/root/scripts/disk-usage.sh的脚本。
修改上面的脚本,如下所示:

#!/bin/bash
# Script: /root/scripts/is-end-of-month.sh
# Purpose: Tell if it is last day of a month
# Author:  <www.theitroad.local> under GPL v2.x+
# --------------------------------
 
# Find tomorrow day in IST time zone 
day=$(TZ=IST-24 date +%d)
 
# Compare it
# If both are 1 means today is the last day of a month
if test $day -eq 1; then
    # Call disk usage script
    /root/scripts/disk-usage.sh
fi

创建计划任务

您可以通过运行以下命令来安装cronjob:

# crontab -e

追加以下代码以每天运行一次名为/root/scripts/is-end-of-month.sh的脚本:

@daily	       /root/scripts/disk-usage.sh

或者

0 0 * * *      /root/scripts/disk-usage.sh

保存并关闭文件。