`
idealab
  • 浏览: 197801 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Crontab和Linux日期相关的tips

阅读更多
好久没有在Javaeye上写东西了,今天碰到一个Linux下schedule任务的问题,记录一下。

crontab分系统级和用户级,系统级的crontab配置文件在/etc/crontab,crontab预定义的定时任务类别分别有:
/etc/crontab.hourly,
/etc/crontab.daily,
/etc/crontab.weekly,
/etc/crontab.monthly,
/etc/crontab.yearly(or crontab.annually),
/etc/crontab.reboot

/etc/crontab文件定义了crontab运行时系统变量,和已启用的定时任务:

引用
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly


crontab定时器的命名规则如下:

#  .---------------- minute (0 - 59)
#  |   .------------- hour (0 - 23)
#  |   |   .---------- day of month (1 - 31)
#  |   |   |   .------- month (1 - 12) OR jan,feb,mar,apr ...
#  |   |   |   |  .----- day of week (0 - 6) (Sunday=0 or 7)  OR sun,mon,tue,wed,thu,fri,sat
#  |   |   |   |  |
#  *   *   *   *  *  command to be executed

Note: 利用/可以定义repeatable任务,如将值“*/2”赋给minute位置,则会每两分钟执行一次。

今天碰到的问题来了:
我要跑一个脚本,脚本日志加上时间戳之后就重定向到日志文件了,所以crontab command就如下:
/home/ec2-user/upload.sh 2>&1 | while read line; do printf "$(date '+%F %T %z')\t$line\n"; done >>/home/ec2-user/upload.log 2>&1

但是当我把crontab任务创建好溜达一圈回来发现收到很多root用户发来的mail:
引用

From: root@ip-10-122-246-207.ec2.internal (Cron Daemon)
To: ec2-user@ip-10-122-246-207.ec2.internal
Subject: Cron <ec2-user@ip-10-122-246-207> /home/ec2-user/upload.sh 2>&1 | while read line; do printf "$(date -u '+
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/ec2-user>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=ec2-user>
X-Cron-Env: <USER=ec2-user>
Status: RO

/bin/sh: -c: line 0: unexpected EOF while looking for matching `''
/bin/sh: -c: line 1: syntax error: unexpected end of file

这个mail很是让人不解,开始以为crontab的任务命令有长度限制,经过一番折腾和搜索crontab官方文档,却发现如下解释:
引用

A <percent-sign> character in this field shall be translated to a <newline>. Any character preceded by a <backslash> (including the '%' ) shall cause that character to be treated literally. Only the first line (up to a '%' or end-of-line) of the command field shall be executed by the command interpreter. The other lines shall be made available to the command as standard input.

原来字符%是一个可被crontab识别的换行符,如此一来%之前的命令才会被执行到,而%之后(第二行)则属于第一行命令的输入参数。这才解释了上述问题。随改之。

改之但是还是得需要日志行加入timestamp,自定义的日期格式是不能用了(包含字符%),故查看date的spec,可以用预定义的几种日期个是进行替换,
比如date -R会采用RFC 2822日期格式进行输出: Fri, 26 Nov 2010 14:31:33 +0000
而date --iso-8601='minutes'则会采用iso-8601日期格式(精确到分钟)来输出: 2010-11-26T14:33+0000

总结一下:Linux下的各种命令/机制必须得一个一个去钻研才能找到突破口,哪怕只是一点很容易被忽略的细节。
2
0
分享到:
评论

相关推荐

    linux C7 crontab离线安装包

    在Linux系统中,Crontab...总结来说,Linux CentOS 7的Crontab离线安装包提供了在无网络环境下安装和管理定时任务的能力,通过RPM包管理方式,我们可以方便地在系统中部署和配置Crontab,实现自动化维护和管理工作。

    Go开发的crontab 代替linux原生crontab.zip

    总的来说,"Go开发的crontab 代替linux原生crontab.zip"项目提供了一个适用于嵌入式Linux开发的轻量级定时任务解决方案,利用Go语言的强大性能和简洁语法,为开发者带来更高效的定时任务管理体验。通过深入研究这个...

    利用Crontab为Linux定时备份Mysql数据库

    在Linux环境中,为了确保数据的安全性和可靠性,定期备份MySQL数据库是一项至关重要的任务。Crontab是Linux中的一个调度工具,可以用来自动化周期性任务,包括数据库的备份。下面将详细介绍如何利用Crontab来实现...

    利用rsync+crontab实现Linux的定时增量备份

    rsync是一款强大的文件同步和备份工具,它的灵活性和效率使其成为Linux环境中不可或缺的一部分。通过rsync服务器,我们可以构建安全的备份策略,保护关键数据免受意外损失。而与crontab的结合使用,进一步提升了备份...

    Linux定时脚本crontab中文乱码.docx

    Linux 定时脚本 crontab 中文乱码解决方案 Linux 系统中的定时脚本 crontab 是一个功能强大的工具,允许用户在指定的时间执行特定的命令或脚本。然而,在使用 crontab 执行 jar 文件时,如果输出结果包含中文字符...

    Linux Crontab 定时任务 命令详解

    Linux Crontab 定时任务 命令详解 Linux Crontab 是一个强大的定时...Linux Crontab 是一个功能强大且灵活的定时任务命令,通过编写 Crontab 文件,可以实现自动化管理和维护服务器,从而提高服务器的安全性和可靠性。

    linux crontab 详解

    ### Linux Crontab 详解 ...通过以上的解析,我们可以更加深入地了解 crontab 的工作原理和使用方法,这对于在 Linux 系统中自动化任务是非常有用的。掌握 crontab 的使用可以极大地提高系统的管理和维护效率。

    redhatlinux6 Crontab安装

    总的来说,Red Hat Linux 6中的Crontab安装涉及到`vixie-cron`和`cronie-anacron`两个软件包,它们提供了定时任务调度的功能。正确安装和配置Crontab,可以帮助用户自动化日常运维工作,提高效率。了解并掌握Crontab...

    使用crontab检测Linux和Oracle运行是否正常

    通过这种方式,我们可以利用`crontab`自动化监控Linux和Oracle数据库的运行状态,及时发现潜在问题,提高系统的可用性和稳定性。在生产和测试环境验证无误后,这样的配置可以大大减轻运维人员的负担,确保业务的正常...

    linux crontab使用介绍

    crontab是linux下最最常用的定时任务,本文档详细介绍了使用方法,供参考

    Linux中使用crontab自动清除日志

    Linux 中使用 crontab 自动清除日志 Linux 中使用 crontab 自动清除日志是一种常见的日志管理方法。crontab 命令是 Unix 和类 Unix 操作系统中设置周期性被执行的指令的命令。该命令从标准输入设备读取指令,并将其...

    crontab离线包.zip

    这个“crontab离线包.zip”包含的是与`crontab`相关的软件包,用于在Linux环境中安装和管理任务调度。资源难寻且可能需要积分下载,这表明这些软件包在某些情况下可能比较稀缺。 `crontab`是Linux下的一个守护进程...

    crontab shell linux

    ### Crontab在Linux Shell中的应用 #### 一、Crontab概述 Crontab是Linux系统中的一个非常重要的工具,用于安排周期性任务。它允许用户设置定时执行的脚本或命令,使得某些任务可以自动地在指定的时间运行。 ####...

    crontab-46.1.tar.gz

    下面将详细解释`crontab`的相关知识点,以及如何在MACOSX系统上编译和使用它。 1. **crontab简介**:`crontab`是cron(时间调度器)的一部分,用于管理用户的定时任务。每个用户都可以有自己的`crontab`文件,定义...

    Linux crontab 命令格式与详细例子

    ### Linux Crontab命令详解与应用实例 Cron是Linux系统中的一...掌握Crontab的格式和用法对于系统管理员和开发人员来说至关重要。通过本文的讲解,相信读者已经对Crontab有了更深刻的理解,并能灵活运用到实际工作中。

    linux下crontab命令

    Crontab 命令是用来设置和管理这些自动执行程序的。下面是 Crontab 命令的详细介绍: 语法 Crontab 命令的语法如下:crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File] 参数 * -e ...

    利用rsync+crontab实现Linux的定时增量备份.docx

    本文主要讲述如何使用 rsync 工具和 crontab 实现 Linux 的定时增量备份。rsync 是一个快速增量文件传输工具,可以用于在同一主机备份内部的备份,也可以作为不同主机网络备份工具之用。 1. rsync 介绍 rsync 是一...

    利用rsync+crontab实现Linux服务器间的定时增量备份精品文档5页.pdf

    本文档旨在通过 rsync 和 crontab 实现 Linux 服务器之间的定时增量备份,主要涉及到 rsync 的安装和配置、ssh 非交互式登录的设置、备份脚本的编写和计划任务的安排。 rsync 的特性 1. 可以镜像保存整个目录树和...

    centos7 crontab 安装包

    `crontab`的每一行由五个字段组成,分别代表分钟、小时、日期、月份和星期,后面跟上要执行的命令。例如,每小时的第一分钟执行`/path/to/command`: ``` * * 1 * * /path/to/command ``` 星号(*)代表任意值,空格...

Global site tag (gtag.js) - Google Analytics