三、shell学习笔记-cron和crontab的使用

1、 cron和crontab

cron 系统调度进程。可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月 中的不同时段运行。
& 使用它在后台运行一个占用时间不长的进程。
Nohup 使用它在后台运行一个命令,即使在用户退出时也不受影响。
有一个叫做 crontab的命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个 crntab文件 来保存调度信息。可以使用它运行任意一个 shell脚本或某个命令,每小时运行一次,或一周 三次,这完全取决于你。每一个用户都可以有自己的 crontab文件,但在一个较大的系统中, 系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件。系统管理员是通过 cron.deny和c ron.allow这两个文件来禁止或允许用户拥有自己的 crontab文件。
为了能够在特定的时间运行作业,需要了解 crontab文件每个条目中各个域的意义和格式。 下面就是这些域:

 第1列 分钟1~59 
 第2列 小时1~23(0表示子夜) 
 第3列 日1~31 
 第4列 月1~1 2 
 第5列 星期0~6(0表示星期天) 
 第6列 要运行的命令

下面是crontab的格式:
分< >时< >日< >月< >星期< >要运行的命令
在这些域中,可以用横杠 -来表示一个时间范围,例如你希望星期一至星期五运行某个作 业,那么可以在星期域使用 1 - 5来表示。还可以在这些域中使用逗号“,”,例如你希望星期一 和星期四运行某个作业,只需要使用 1 , 4来表示。可以用星号 *来表示连续的时间段。如果你 对某个表示时间的域没有特别的限定,也应该在该域填入 *。该文件的每一个条目必须含有 5 个时间域,而且每个域之间要用空格分隔。该文件中所有的注释行要在行首用 #来表示。
例:

30 21* * * /apps/bin/cleanup.sh

上面的例子表示每晚的21 : 30运行/ apps/bin目录下的cleanup . sh。

45 4 1,10,22 * * /apps/bin/backup.sh

上面的例子表示每月1、10、22日的4 : 45运行/apps/bin目录下的backup.sh。

10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;

上面的例子表示每周六、周日的1 : 10运行一个find命令。

0,30 18-23 * * * /apps/bin/dbcheck.sh

上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟运行/apps/bin目录下的d bcheck.sh。

0 23 * * 6 /apps/bin/qtrend.sh

上面的例子表示每星期六的11 : 00 pm运行/apps/bin目录下的qtrend.sh。
当使用 crontab运行shell 脚本时,要由用户来给出脚本的绝对路径,设置相应的环境变量。

1.2、 crontab命令选项

crontab命令的一般形式为:
crontab [-u user] -e -l -r
其中:
-u 用户名。
-e 编辑crontab文件。
-l 列出crontab文件中的内容。
-r 删除crontab文件。 如果使用自己的名字登录,就不用使用 - u选项,因为在执行 crontb命令时,该命令能够知道当前的用户。
可以使用&命令把作业放到后台执行。 该命令的一般形式为: 命令 &
为什么要在后台执行命令?因为当在后台执行命令时,可以继续使用你的终端做其他事 情。适合在后台运行的命令有 find、费时的打印作业、费时的排序及一些 shell脚本。在后台运 行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。
如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用 nohup命令。该命令可以在你退出帐户之后继续运行相应的进程。 Nohu p就是不挂起的意思( no hang up)。 该命令的一般形式为:

nohup command &
是的,cron-utils可以用来验证crontab表达式的有效性。通过使用cron-utils,您可以解析和验证一个crontab表达式的每个部分,包括分钟、小时、日期、月份和星期几。如果表达式无效,cron-utils将返回一个错误消息,告诉您表达式的哪个部分是无效的。 下面是一个使用cron-utils验证crontab表达式有效性的示例代码: ```java import com.cronutils.descriptor.CronDescriptor; import com.cronutils.model.Cron; import com.cronutils.model.definition.CronDefinitionBuilder; import com.cronutils.parser.CronParser; import com.cronutils.validator.CronValidator; public class CronUtilsExample { public static void main(String[] args) { String crontabExpression = "0 0 * * * ?"; // an example crontab expression CronParser parser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ)); Cron cron = parser.parse(crontabExpression); CronValidator validator = CronValidator.instance(); validator.validate(cron); CronDescriptor descriptor = CronDescriptor.instance(); String description = descriptor.describe(cron); System.out.println(description); } } ``` 在上面的代码中,我们首先使用CronParser解析了一个crontab表达式,然后使用CronValidator验证了这个表达式的有效性。最后,我们使用CronDescriptor生成了一个可读的描述,以便了解这个表达式的含义。如果表达式无效,CronValidator将会抛出异常,告诉您表达式的哪个部分是无效的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值