[转]Ubuntu下crontab(定时器)命令的用法

本文介绍如何在Ubuntu系统中使用Cron进行任务调度,包括编辑crontab文件、设置不同频率的任务执行以及重启Cron服务的方法。
 Ubuntu下crontab命令的用法
正文

cron是一个Linux下的后台进程,用来定期的执行一些任务。因为我用的是Ubuntu,所以这篇文章中的所有命令也只能保证在Ubuntu下有效,但其他系统应该也差不多。

想要让cron执行你指定的任务,首先就要编辑crontab文件。crontab是一个文本文件,用来存放你要运行的命令。你可以以下命令



    crontab -e 



来打开你的用户所属的crontab文件。第一次用这个命令,会让你选择文本编辑器,我选的是vim。选定的编辑器也可以使用

    select-editor 


命令来更改。这点命令行中已经有足够的提示,就不多说了。


打开后的crontab文件类似这种样子:



    # m h  dom mon dow   command 
    */2 * * * * date >> ~/time.log 



第二行是我为了测试写的一个定期任务,它的意思是,每隔两分钟就执行 date >> ~/time.log 命令(记录当前时间到time.log文件)。你可以把它加入你的crontab中,然后保存退出。



保存了crontab之后,我们还需要重启cron来应用这个计划任务。使用以下命令:



    sudo service cron restart 



下面稍微解释下crontab中每行的含义。crontab中的每一行代表一个定期执行的任务,分为6个部分。前5个部分表示何时执行命令,最后一个部分表示执行的命令。每个部分以空格分隔,除了最后一个部分(命令)可以在内部使用空格之外,其他部分都不能使用空格。前5个部分分别代表:分钟,小时,天,月,星期,每个部分的取值范围如下:



分钟          0 - 59

小时          0 - 23

天              1 - 31

月              1 - 12

星期          0 - 6       0表示星期天



除了这些固定值外,还可以配合星号(*),逗号(,),和斜线(/)来表示一些其他的含义:



星号          表示任意值,比如在小时部分填写 * 代表任意小时(每小时)

逗号          可以允许在一个部分中填写多个值,比如在分钟部分填写 1,3 表示一分钟或三分钟

斜线          一般配合 * 使用,代表每隔多长时间,比如在小时部分填写 */2 代表每隔两分钟。所以 */1 和 * 没有区别

                  */2 可以看成是能被2整除的任意值。



以下是一些例子(省略了命令部分):



    * * * * *                  # 每隔一分钟执行一次任务 
    0 * * * *                  # 每小时的0点执行一次任务,比如6:00,10:00 
    6,10 * 2 * *            # 每个月2号,每小时的6分和10分执行一次任务 
    */3,*/5 * * * *          # 每隔3分钟或5分钟执行一次任务,比如10:03,10:05,10:06 



以上就是在cron中加入计划任务的基本知识。因为cron中的任务基本就是执行命令行,所以当然也会有权限问题。以上例子中的任务就是以你当前登录用户的权限执行的,如果你需要以root用户执行某个任务,可以在crontab前加上sudo。



    sudo crontab -e 



顺带一提,crontab文件对每个用户都是不同的,所以刚才设置的定期看时间的任务,在这里是看不到的。因为我们没有为root用户增加这样的计划任务。



再顺带一提,不喜欢命令行的童鞋可以去 Ubuntu软件中心 下一个 计划任务 程序。在软件中心中搜索 schedule 就可以搜到。它是一个GUI的程序,做的还蛮傻瓜化的。不过好像没办法设置成使用root用户运行任务。而且,对于要ssl到服务器上进行操作的童鞋来说,命令行还是最好(唯一)的工具。



因为我目前就用到这些知识,所以对cron也没有更多了解。想了解Ubuntu下的cron的童鞋,可以去看看Ubuntu官方的这篇 CronHowTo ,个人觉得讲的还是蛮详细的。
<think>好的,用户问除了crontab之外还有什么shell命令可以做定时任务。我需要先回想一下Linux系统中常用的定时任务方法。首先,crontab是最常见的,但用户已经知道这个,所以得找其他方法。 可能想到的有at命令,它用于单次任务。比如用户想在特定时间运行一次任务,at就比较合适。然后,systemd timers,这是现代Linux系统常用的,尤其是使用systemd作为初始化系统的发行版。它可以处理更复杂的定时任务,并且和系统服务集成紧密。 另外,sleep命令结合循环可能也是一种方法,虽然不太高效,但适合简单的间隔执行。比如在脚本里用while循环加sleep,实现每隔一段时间执行任务。不过这种方法可能有精度问题,而且不适合长期任务管理。 还有anacron,主要用于处理在关机期间错过的定时任务,适合笔记本电脑或者不24小时开机的系统。anacron会检查未执行的任务,并在下次开机时执行。 此外,一些第三方工具如fcron,但可能用户不太常用。或者使用编程语言自带的定时库,比如Python的schedule模块,但用户问的是shell命令,所以可能更倾向于系统自带的工具。 需要检查这些方法的适用场景和优缺点。比如,at适合单次,systemd适合需要与服务配合的任务,sleep循环适合简单情况,anacron适合非24小时运行的系统。还要注意不同系统之间的兼容性,比如systemd在Debian、Ubuntu、CentOS等主流发行版中的支持情况,而at和anacron可能在旧系统或不同init系统中使用。 可能需要提醒用户权限问题,比如at需要安装和权限配置,systemd需要管理员权限来创建timer单元。另外,crontab虽然强大,但可能对于复杂依赖的任务不够灵活,这时候systemd timers更有优势。 总结下来,回答应该包括at命令、systemd timers、sleep循环、anacron,以及可能的其他工具。需要简明扼要地解释每个方法的用途和示例,帮助用户根据具体需求选择合适的方法。</think>在Linux系统中,除了常用的crontab之外,还有以下几种实现定时任务的方法: 1. **at命令**(单次任务调度) - 特点:执行一次性任务 - 示例: ```bash echo "sh /path/to/script.sh" | at 02:30 tomorrow at now + 1 hour <<< "tar -zcvf backup.tar.gz /data" ``` 2. **systemd timers**(系统服务级定时器) - 特点:现代Linux发行版推荐方式,支持精确到秒级 - 实现步骤: 1. 创建.service文件定义任务 2. 创建.timer文件配置触发规则 3. 示例timer配置: ```ini [Timer] OnCalendar=*-*-* 03:15:00 Unit=myjob.service ``` 3. **sleep循环**(简单间隔执行) - 特点:适用于快速测试场景 - 示例: ```bash while true; do ./monitor.sh sleep 300 # 单位:秒(5分钟) done ``` 4. **anacron**(异步定时任务) - 特点:针对非24小时运行设备的补漏机制 - 配置文件:`/etc/anacrontab` - 示例配置: ```conf 1 5 daily.job /usr/sbin/daily-task.sh ``` 5. **inotifywait**(事件驱动型触发) - 特点:通过文件系统事件触发 - 示例(监控目录变化): ```bash inotifywait -m /target/dir -e create | while read path action file; do ./process_new_file.sh "$file" done ``` **选择建议**: - 单次任务 → `at`命令 - 系统级定时服务 → `systemd timers` - 简单间隔任务 → `sleep循环` - 补漏错过的任务 → `anacron` - 事件驱动任务 → `inotifywait` **注意事项**: 1. 权限管理:systemd和crontab需要root权限配置 2. 日志记录:建议添加`>> /var/log/task.log 2>&1`重定向输出 3. 环境变量:注意不同方法执行时的环境差异,建议脚本中显式声明PATH
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值