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

Linux中的守护进程——cron进程

文章标题:Linux中的守护进程——cron进程。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  刚开始的时候对于后台进程,守护进程,以及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 在日志中记录输出(参见教程 “LPI 102 考试准备:管理任务” 中的讨论)。但是,定向到 stdout 的输出会通过电子邮件发送给用户。

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

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

  对于cron的学习,可能这也算是告一段落了,总结一下,以示庆祝


推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 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中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 本文总结了Linux下多线程执行shell脚本的4种方法,包括切换到工作目录执行、使用绝对路径执行、直接使用bash或sh执行。同时介绍了为什么需要加上"./"来执行脚本的原因。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • 本文介绍了Shell中for命令的基本格式和用法,通过提供一个值列表来迭代执行一系列命令。同时还介绍了如何读取列表中的值,并给出了for命令与其他命令的结合使用示例。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • 从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 ... [详细]
author-avatar
ayuanliang
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有