好久没有在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下的各种命令/机制必须得一个一个去钻研才能找到突破口,哪怕只是一点很容易被忽略的细节。
分享到:
相关推荐
在Linux系统中,Crontab...总结来说,Linux CentOS 7的Crontab离线安装包提供了在无网络环境下安装和管理定时任务的能力,通过RPM包管理方式,我们可以方便地在系统中部署和配置Crontab,实现自动化维护和管理工作。
总的来说,"Go开发的crontab 代替linux原生crontab.zip"项目提供了一个适用于嵌入式Linux开发的轻量级定时任务解决方案,利用Go语言的强大性能和简洁语法,为开发者带来更高效的定时任务管理体验。通过深入研究这个...
在Linux环境中,为了确保数据的安全性和可靠性,定期备份MySQL数据库是一项至关重要的任务。Crontab是Linux中的一个调度工具,可以用来自动化周期性任务,包括数据库的备份。下面将详细介绍如何利用Crontab来实现...
rsync是一款强大的文件同步和备份工具,它的灵活性和效率使其成为Linux环境中不可或缺的一部分。通过rsync服务器,我们可以构建安全的备份策略,保护关键数据免受意外损失。而与crontab的结合使用,进一步提升了备份...
Linux 定时脚本 crontab 中文乱码解决方案 Linux 系统中的定时脚本 crontab 是一个功能强大的工具,允许用户在指定的时间执行特定的命令或脚本。然而,在使用 crontab 执行 jar 文件时,如果输出结果包含中文字符...
Linux Crontab 定时任务 命令详解 Linux Crontab 是一个强大的定时...Linux Crontab 是一个功能强大且灵活的定时任务命令,通过编写 Crontab 文件,可以实现自动化管理和维护服务器,从而提高服务器的安全性和可靠性。
### Linux Crontab 详解 ...通过以上的解析,我们可以更加深入地了解 crontab 的工作原理和使用方法,这对于在 Linux 系统中自动化任务是非常有用的。掌握 crontab 的使用可以极大地提高系统的管理和维护效率。
总的来说,Red Hat Linux 6中的Crontab安装涉及到`vixie-cron`和`cronie-anacron`两个软件包,它们提供了定时任务调度的功能。正确安装和配置Crontab,可以帮助用户自动化日常运维工作,提高效率。了解并掌握Crontab...
通过这种方式,我们可以利用`crontab`自动化监控Linux和Oracle数据库的运行状态,及时发现潜在问题,提高系统的可用性和稳定性。在生产和测试环境验证无误后,这样的配置可以大大减轻运维人员的负担,确保业务的正常...
crontab是linux下最最常用的定时任务,本文档详细介绍了使用方法,供参考
Linux 中使用 crontab 自动清除日志 Linux 中使用 crontab 自动清除日志是一种常见的日志管理方法。crontab 命令是 Unix 和类 Unix 操作系统中设置周期性被执行的指令的命令。该命令从标准输入设备读取指令,并将其...
这个“crontab离线包.zip”包含的是与`crontab`相关的软件包,用于在Linux环境中安装和管理任务调度。资源难寻且可能需要积分下载,这表明这些软件包在某些情况下可能比较稀缺。 `crontab`是Linux下的一个守护进程...
### Crontab在Linux Shell中的应用 #### 一、Crontab概述 Crontab是Linux系统中的一个非常重要的工具,用于安排周期性任务。它允许用户设置定时执行的脚本或命令,使得某些任务可以自动地在指定的时间运行。 ####...
下面将详细解释`crontab`的相关知识点,以及如何在MACOSX系统上编译和使用它。 1. **crontab简介**:`crontab`是cron(时间调度器)的一部分,用于管理用户的定时任务。每个用户都可以有自己的`crontab`文件,定义...
### Linux Crontab命令详解与应用实例 Cron是Linux系统中的一...掌握Crontab的格式和用法对于系统管理员和开发人员来说至关重要。通过本文的讲解,相信读者已经对Crontab有了更深刻的理解,并能灵活运用到实际工作中。
Crontab 命令是用来设置和管理这些自动执行程序的。下面是 Crontab 命令的详细介绍: 语法 Crontab 命令的语法如下:crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File] 参数 * -e ...
本文主要讲述如何使用 rsync 工具和 crontab 实现 Linux 的定时增量备份。rsync 是一个快速增量文件传输工具,可以用于在同一主机备份内部的备份,也可以作为不同主机网络备份工具之用。 1. rsync 介绍 rsync 是一...
本文档旨在通过 rsync 和 crontab 实现 Linux 服务器之间的定时增量备份,主要涉及到 rsync 的安装和配置、ssh 非交互式登录的设置、备份脚本的编写和计划任务的安排。 rsync 的特性 1. 可以镜像保存整个目录树和...
`crontab`的每一行由五个字段组成,分别代表分钟、小时、日期、月份和星期,后面跟上要执行的命令。例如,每小时的第一分钟执行`/path/to/command`: ``` * * 1 * * /path/to/command ``` 星号(*)代表任意值,空格...