📜  ubuntu cron 作业日志 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:35:25.123000             🧑  作者: Mango

Ubuntu Cron 作业日志 - Shell/Bash

介绍:

本文主要介绍在 Ubuntu 系统下如何使用 cron 执行定时任务并记录日志。

什么是 cron?

cron 是一种 Unix/Linux 系统下的定时任务工具,可以让我们在指定的时间点(分钟、小时、日期、星期几等)执行一系列指令或脚本。cron 作业的名称通常被称为 cron 表达式,格式如下:

*     *     *     *     *  command to be executed
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- day of the week (0 - 6) (Sunday=0)
|     |     |     +------- month (1 - 12)
|     |     +--------- day of the month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)

上面这个 cron 表达式表示在每天的 1 点整执行一次脚本。除此之外,我们还可以使用星号(*)代表任意值,逗号(,)表示多个值,以及破折号(-)表示一个范围。

如何记录 cron 作业日志?

在 Ubuntu 系统下,cron 作业的执行日志通常保存在 /var/log/syslog 文件中。但是,这个日志文件非常大,要想找到特定的 cron 作业日志非常困难。因此,我们需要针对每个 cron 作业单独创建一个日志文件。

我们可以先创建一个日志文件夹,例如 /var/log/cron,然后在里面为每个 cron 作业创建一个单独的日志文件。每个 cron 作业的日志文件名称应该以作业名称的简短描述作为前缀,例如:

/var/log/cron/my_cron_job.log

接下来,我们需要在每个 cron 作业的命令中增加日志输出。可以使用以下命令将作业执行结果输出到日志文件中:

* * * * * /path/to/my/command >> /var/log/cron/my_cron_job.log 2>&1

该命令每分钟执行一次,将作业执行结果追加到指定的日志文件中。其中,符号 >> 表示追加,2>&1 则表示将标准错误输出重定向到标准输出中。这样,我们就可以在单独的日志文件中查看每个 cron 作业的执行情况了。

如何防止日志文件过大?

随着时间的推移,日志文件可能会越来越大,占用大量的磁盘空间。因此,我们需要采取一些措施限制日志文件的大小。

一种简单的方法是使用 logrotate 工具。该工具可以自动对指定的日志文件进行滚动,将旧日志文件备份并删除。我们可以在 /etc/logrotate.d 中创建一个新的 logrotate 配置文件,例如:

/var/log/cron/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /usr/bin/killall -HUP rsyslogd >/dev/null 2>&1 || true
    endscript
}

该配置文件指定了一些日志滚动的参数,例如每天备份一次日志、保留最近 7 天的备份、启用压缩等。当日志文件达到一定大小时,logrotate 会自动对其进行滚动,产生新的备份并删除旧日志文件。

markdown 格式代码片段:

# Ubuntu Cron 作业日志 - Shell/Bash

介绍:

本文主要介绍在 Ubuntu 系统下如何使用 cron 执行定时任务并记录日志。

**什么是 cron?**

cron 是一种 Unix/Linux 系统下的定时任务工具,可以让我们在指定的时间点(分钟、小时、日期、星期几等)执行一系列指令或脚本。cron 作业的名称通常被称为 cron 表达式,格式如下:

...

**如何记录 cron 作业日志?**

...

**如何防止日志文件过大?**

...

/var/log/cron/my_cron_job.log
* * * * * /path/to/my/command >> /var/log/cron/my_cron_job.log 2>&1
/var/log/cron/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /usr/bin/killall -HUP rsyslogd >/dev/null 2>&1 || true
    endscript
}