热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于linux的Cron进程的总结

关于linux的Cron进程的总结--Linux通用技术-Linux编程与内核信息,下面是详情阅读。
作者:kissinger_1984

看了两天的,终于觉得把这个Cron看得稍微明白点了,总结一下。

刚开始的时候对于后台进程,守护进程,以及cron进程的关系根本没弄清楚,现在了解了。就像我前面的文字里面写的:

后台进程:运行时无须用户输入的程序。可以在诸如 UNIX/Linux 之类的多任务操作系统上运行多个后台进程,而用户则与前台进程交互(例如,数据输入)。有些后台进程(例如守护程序)从来都不需要用户输入。其它一些进程只是在用户忙于目前运行于前台的程序时才临时处于后台。

守护进程是一种后台进程。Cron进程是众多守护进程中的一种,看看Cron这个单词在字典里面的解释:

cron
= chronograph,【unix】(时钟)守护程序,(精密)计时程序

从字面意思就可以大概了解,它是一种和时间有关系的程序,简单的说,cron守护进程执行预定的命令,他会在预定的时间执行预订的命令或者脚本。

好,知道了他是干嘛的,现在就来了解他是怎么工作的。

“以一定的时间间隔运行作业需要使用 cron 进行管理,它由crond守护进程和一组表(描述执行哪些操作和采用什么样的频率)组成。这个守护进程每分钟唤醒一次,并通过检查 crontab 判断需要做什么。用户使用crontab命令管理 crontab。crond守护进程常常是在系统启动时由 init 进程启动的。”

注:上文摘自网络,实际上,在我的机器上,安装的是Vixie-Cron,所以我的电脑上不是crond,而是Vixie-Cron

关于crontab这个表的内容,以及如何写这个表,前面一篇文字已经有讲过,不再赘述。有一点新的内容需要补充,时间后面的字段,也就是第六个字段:第 6 个字段包含前 5 个字段之后的所有内容,它是要传递给shell 的字符串。百分号(%)将转换为空行,所以如果要使用 % 或其他任何特殊字符,就要在前面加上反斜线(\)。第一个 % 之前的一行传递给 shell,这个 % 之后的所有行都作为标准输入传递。

一般来说,只有root用户才有权限去运行cron进程,若管理员允许或者禁止其他用户使用,则应编辑/etc/下面的c r o n . d e n y和c r o n . a l l o w这两个文件来禁止或允许用户拥有自己的c r o n t a b文件。

每一个用户都可以有自己的c r o n t a b文件,但在一个较大的系统中,系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件。系统管理员是通过c r o n . d e n y和c r o n . a l l o w这两个文件来禁止或允许用户拥有自己的c r o n t a b文件。

若没有自己的crontab文件,则第一次使用时可能应该手动创建一个文件,然后使用$ crontab <你的crontab文件名> 来提交你的crontab,之后就可以用crontab命令来修改,删除,列出你的crontab的内容了。关于如何此命令如何使用也参见上一篇关于cron的博客日志。

注:crontab这个词的意思,本身他是一个表,里面记录预订时间预定执行的命令或脚本;第二,他也是个命令,用户使用 crontab 命令管理 crontab这个表。

cron在运行的时候要查看crontab来进行作业的调度。这里上文有几句话非常重要,解释了我碰到过的问题:这个守护进程每分钟唤醒一次,并通过检查 crontab 判断需要做什么。每分钟检查一次crontab,然后做一次运行命令或脚本的安排。

用户自己创建的crontab在哪儿呢?在这里:/var/spool/cron/crontabs 。其实,cron检查的crontab不只包括用户自己创建的crontab,还有系统的crontab,包括/etc/crontab和/etc/cron.d 目录中的文件(/etc/cron.d 下有可能会存在at调度的作业)。其中/etc/crontab有必要解释一下,一个典型的例子:

/etc/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 中,在第五个时间字段(星期)和命令之间增加了一个字段。这个字段指定哪个用户应该运行这个命令,一般情况下是根用户。然后解释下后面的命令:在/etc/下会有cron.hourly,cron.daily,cron.weekly,cron.monthly这四个文件夹,他们下面分别放着一些文件,用来指定每小时,每天,每个星期,每个月要执行的操作,命令run-parts的意思是执行下面目录里面的程序和脚本,例如run-parts /etc/cron.hourly意思就是执行/etc/cron.hourly文件夹下的程序以及脚本。

在这个示例中,真正的工作由 run-parts 命令执行,它运行 /etc/cron.hourly、/etc/cron.daily 等目录中的脚本;/etc/crontab 仅仅控制执行作业的时间。注意,这里的所有命令都作为根用户运行。还要注意,crontab 可以包含 shell 变量赋值,这些赋值会在运行命令之前执行。

输出

您可能想知道对来自命令的输出会如何处理。为使用 cron 而设计的大多数命令会使用 syslog 在日志中记录输出。但是,定向到 stdout 的输出会通过电子邮件发送给用户。

对上面这段还不是很明白。但是我们可以在系统日志/var/log/messages里面看到你cron调度的命令或者脚本有么有执行。然后,目前测试,如果是GUI的应用程序,似乎用cron不能良好的运行,所谓不能良好的运行,举例来说:不能使用mp3blaster播放音乐,因为他需要使用ncurses去绘制他的界面;在比如,使用mplayer去播放视频,我下午的测试,只能播放出音乐,不能显示出视频。

在gentoo里面用eix -s cron看了下,cron这种程序还是有很多种的,不同的人开发的不同特色的cron程序。比如dcron,fcron等等,详细就自己去看下description了。

对于cron的学习,可能这也算是告一段落了,总结一下,以示庆祝。
推荐阅读
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文总结了Linux下多线程执行shell脚本的4种方法,包括切换到工作目录执行、使用绝对路径执行、直接使用bash或sh执行。同时介绍了为什么需要加上"./"来执行脚本的原因。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 从U ... [详细]
  • crontab 自动执行定时任务时,命令无法执行的解决方案
    为什么80%的码农都做不了架构师?最近在工作中需要使用crontab执行定时任务,处理memcacheq消息队列里的数据,但是发现在 ... [详细]
  • 本文介绍了在Android Studio中使用命令行build gradle的方法,并解决了一些常见问题,包括手动配置gradle环境变量和解决External Native Build Issues的方法。同时提供了相关参考文章链接。 ... [详细]
  • ZABBIX 3.0 配置监控NGINX性能【OK】
    1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ... [详细]
  • 其实之前也有下载过完整的android源码,但是从来没有对这个做过一些总结,在加上最近需要经常去看,索性就在从新下载,编译一下,其实这些东西官网上面都有。http:sou ... [详细]
  • homemyUserscript.sh>>homemyUserlog.txt2>&1在script.sh ... [详细]
  • docker容器的数据管理一:数据卷实现数据的永久化,完全独立于容 ... [详细]
  • mysql自动打开文件_让docker中的mysql启动时自动执行sql文件
    本文提要本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动My ... [详细]
author-avatar
茨冈人686
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有