`
peigang
  • 浏览: 171509 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

crontab使用经验(转)

    博客分类:
  • OS
 
阅读更多

crontab使用经验  本文出自孤风颠影|网站运维 网址:http://yunhaozou.org/linux/109.html.

 

 作为网站运维工程师,经常要与crontab打交道,通过使用crontab自动运行定时任务从而达到自动化运维的目的。在我的日常工作中也深刻地感受到了crontab的方便、高效。
但是最近在使用crontab过程中,接连遇到头疼的问题:手动执行脚本时一点问题都没有,可是放在crontab中脚本死活也不运行。最后查出来原因一次是因为脚本里面文件路径没有写全路径导致的,另一次是因为脚本运行需要依赖java环境变量,其实两次都是环境变量的问题造成的。从网上同样了解到一般crontab无法运行的问题都是由环境变量在crontab中不一定可识别引起的。某前辈总结说:crontab如果不注意的话早晚会出问题,而且这种问题一旦出一次,就会永远记得,因为这种问题很折腾人。精辟啊~~
下面我也来试试总结下crontab的基本用法,环境变量以及其他要注意的问题。各位看官可以参考下,有什么问题也可以留言讨论。
————————————————————————————
1.crontab的基本用法
Usage: crontab [-u user] [-e|-l|-r]
Crontab 的格式说明如下:
* 逗号(‘,’) 指定列表值。如: “1,3,4,7,8″
* 中横线(‘-’) 指定范围值 如 “1-6″, 代表 “1,2,3,4,5,6″
* 星号 (‘*’) 代表所有可能的值
*/15 表示每 15 分钟执行一次
# Use the hash sign to prefix a comment
# +—————- minute (0 – 59)
# | +————- hour (0 – 23)
# | | +———- day of month (1 – 31)
# | | | +——- month (1 – 12)
# | | | | +—- day of week (0 – 7) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
2.crontab与环境变量
不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:
1)脚本中涉及文件路径时写全局路径;
2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3)当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
3.其他应该注意的问题
1)新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
2)每条 JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。
3)当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。
4)千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
5)在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’`。
—————————————————————————————–
/etc/profile, /etc/bashrc, .bash_profile和.bashrc的差别
用户登陆Linux操作系统的时候,”/etc/profile”, “~/.bash_profile”等配置文件会被自动执行。执行过程是这样的:登陆Linux系统时,首先启动”/etc/profile”,然后启动用户目录下的”~/.bash_profile”,如果”~/.bash_login”和”~/.profile”文件存在的时候也会在执行”~/.bash_profile”后被依次调用。
——————
cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
alias vi=vim
通过上面脚本可以看到~/.bash_profile文件先调用~/.bashrc,然后再把PATH加载。
——————
下面是一些区别:
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d目录的设置文件中搜集shell的设置;
/etc/bashrc:为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取;
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件,
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时及每次打开新的shell时,该文件被读取;
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件;
——–
/etc/profile是全局性的功能,其中设置的变量作用于所有用户,~/.bash_profile中设置的变量能继承/etc/profile中的变量并作用于用户。
~/.bash_profile 是交互式、login 方式进入 bash 运行的;~/.bashrc 是交互式 non-login 方式进入 bash 运行的。

分享到:
评论

相关推荐

    基于go实现的crontab.zip

    它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go...

    一个用来定时清理服务器日志的工具, 基于Go开发, 不依赖于任何第三方工具例如crontab和at, 占用资源少和内存小.zip

    它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go...

    树莓派使用手册4.pdf

    对于特定的应用案例,如宝宝看护器,手册提供了硬件和软件的详细配置步骤,包括如何使用温湿度传感器、摄像头,并用crontab运行传感器脚本,还鼓励用户进行创新和发散思维,比如为红外LED设置开关,或者用乐高玩具...

    树莓派播放ip

    总的来说,这个项目涵盖了树莓派的基础使用、网络配置、命令行操作、Linux脚本编写、文本转语音技术以及音乐播放软件的使用。这些知识点在日常的树莓派开发和维护中非常常见,对于提升你的Linux技能和树莓派实践经验...

    Linux运维趋势_第03期_运维与开发

    - **Crontab使用心得**:分享了在Linux环境下如何有效利用定时任务调度工具Crontab。 - **Shell学习笔记——总括篇**:总结了Shell脚本的基础知识和进阶技巧。 - **25个必须记住的SSH命令**:列举了运维工作中常用的...

    GNU/Linux 基礎指令集

    作者通过自身的使用经验,结合在线文档和国际社区资源,总结出这份实用的手册。 #### 二、基础知识介绍 文档首先介绍了GNU/Linux的发展背景和个人使用经历,并表达了作者撰写此文档的初衷——希望能够为中文社区...

    中兴 开发部软件工程师招聘试题(参考答案)

    4. **进程调度命令**:了解Unix/Linux操作系统的常用命令,如top、at、crontab和kill。 5. **二叉树遍历**:通过后序和中序遍历推导前序遍历,检验数据结构理解。 6. **结构体**:C语言中的结构体概念,了解复合数据...

    unix power tools 3ed.pdf

    - **计划任务**: 使用`at`和`crontab`安排任务。 - **定时器**: 如何使用计时器实现延迟执行。 - **批处理**: 使用批处理脚本实现周期性任务。 **5.4 系统性能和性能分析 (Chapter 26: System Performance and ...

    面试必备,项目详情

    9. 定时调度与数据迁移:在项目中提到了Crontab调度脚本和HDFS数据定时导入Hive的操作,这些是实现数据迁移和任务调度的重要手段。定时任务调度允许自动化地执行定期的数据处理工作,而数据迁移则是将数据从一个存储...

    linux运维笔试面试题.pdf

    Linux运维笔试面试题的...这些知识点是Linux运维人员笔试面试中的常见内容,面试者需要对这些知识点有深入的理解和实践经验。掌握这些知识有助于解决工作中遇到的各类问题,确保Linux系统的稳定运行和服务的可靠交付。

    Linux必学的60个命令.doc

    掌握这些基本命令是Linux初学者的必经之路,随着经验的积累,用户可以更深入地了解和运用这些工具,从而更高效地管理Linux系统。每个命令都有其特定用途,熟练掌握它们将极大地提高在Linux环境中的工作效率。

    360搜索容器技术实践.pdf

    例如,本地文件存储被替换为S3、GlusterFS或CephFS,MySQL/Redis数据库进行了相应的调整,定时任务从Crontab转向K8S Cronjob,日志管理和监控也进行了标准化。 7. **资源推送和自动化**:通过不改变原有体系,利用...

    linux命令大全完整版

    命令大全的完整版为用户提供了丰富的参考资源,适合新手作为入门工具书,同时也方便经验丰富的用户快速查找和参考。在实际操作中,用户应该了解命令的基本格式、常用选项以及相应的操作环境,以便能够有效地运用这些...

    树莓派 和python 讲解

    比如,你可以创建一个Web服务器,使用Python的Flask或Django框架,这样通过网络就能访问到树莓派上的数据或控制其硬件设备。 在数据分析和可视化方面,Python的Pandas、NumPy和Matplotlib库可以帮助树莓派收集和...

    经典linux系统工程师系统管理员面试题.doc

    7. **定时任务**:使用cron调度器可以实现每周日早上8点重启服务器,编辑`crontab -e`,添加一行`0 8 * * 7 /sbin/reboot`,表示周日8点执行重启。 8. **邮件系统软件**:常见的邮件系统软件有Postfix、Exim、...

    gfycat_bot:使用praw从reddit获取流式链接,并将其上传到gfycat,因为其被阻止

    8. **自动化任务**:可能使用`schedule`库或`crontab`进行定时任务设置。 9. **GFYCat API**:学习并使用GFYCat的API接口,将视频或GIF内容上传到其平台。 10. **文件上传**:理解如何处理和上传多媒体文件,可能...

    linux入门命令,有助于新手入门!

    初学者可以从常用的命令开始,如`cd`(切换目录)、`pwd`(显示当前目录)、`cp`(复制文件或目录)、`rm`(删除文件或目录)等,随着经验的积累,逐渐深入学习更多复杂的命令和组合使用,从而更好地理解和掌握Linux...

    循序渐进linux

    无论是对于初学者还是有一定经验的用户来说,《循序渐进Linux》都是一本非常实用的学习资料。它不仅提供了详尽的操作指南,还帮助读者建立起对Linux系统的全面理解,为今后的技术发展打下坚实的基础。

    Linux必学的60个命令

    【安装和登录命令】 在Linux系统中,安装和登录是使用系统的初始步骤。以下是一些基本的命令: ...命令行参数 `-p` 保留...随着经验的积累,用户还可以探索更多高级命令和脚本编程,以实现自动化和定制化的工作流程。

Global site tag (gtag.js) - Google Analytics