Linux例行性工作at,cron,进程管理

简介:

  Linux工作调度的种类:at,cron

两种工作调度的方式:

     一种是例行性的,就是每隔一定的周期要来办的事项(通过at实现);

一种是突发性的,就是这次做完以后就没有的那一种(通过cron实现)。

一、突发性的工作调度(at)

要使用单一工作调度,我们的Linux系统上面由atd来负责这个调度的服务,首先启动/etc/init.d/atd restart   

 可以设置一下开机时就启动这个服务,免得每次重新启动都得再来一次。 chkconfig atd on 

 at安全管理

    /etc/at.deny

    将不可以使用at的帐号写入其中,若未记录到这个文件当中的用户,就可以使用at

 at的参数使用

   at [-m -v -c -l -d]  TIME

  -m 当at的工作完成后,即使没有输出信息,以      email通知用户该工作已完成

   -l 相当于atq,列出所有用户的at任务

   -d 相当于atrm,去掉at的任务

   -v 可以用较明显的时间格式列出at调度中的工作

   -c 列出后面接的该项工作的实际命令内容

TIME:时间格式,这里可以定义什么时候要进行at这项工作时间,格式有:

    HH:MM     ex>04:00

    HH:MM YYYY-MM-DD  ex>04:00 2012-04-01

    HH:MM[am|pm]  [Month]  [Date]   ex>04:00 March 17

    HH:MM[am|pm]  +number [minutes|hours|days|weeks]

    ex>now +5 minutes  就是说,在现在在加5minutes后进行该工作调度。

    编写例行性工作时应注意:

    使用命令时尽量用绝对路径,

    用Ctrl+d 结束编写。

at工作的管理

 at并不像cron那样,可以用crontab -e来编辑自己的工作调度,

当我们发现命令输入错误,就目前来讲,只能删除它。

(因为at的存放文件并不像crontab,at命令的存放文件为二进制文件[/var/spool/at/,对应的工作调度执行过后,则其二进制文件也就消失了],可用od查看,从简单使用的角度来讲,若命令错了,直接删除(atrm)重建)

  atq 查询目前主机上面有多少的at工作调度;

  atrm 后加工作序列号,删除该工作任务。

二、例行性的工作调度(cron)

   cron安全管理

   /etc/cron.deny

   将不可以使用crontab的帐号写入其中,若未记录到这个文件当中的用户,就可以使用crontab.

  crontab的参数使用

  -u -e -l -r

  -u 只有root才能进行这个任务,也即帮其他用户新建  、删除crontab工作高度;

  -e 编辑crontab的工作内容;

  -l 查阅crontab的工作内容;

  -r 删除所有的crontab的工作内容,若仅要删除一项  ,请用-e去编辑。

范例:用root的身份在每天的12:00发信给自己

crontab -e

#此时进入vi的编辑器界面。

 0  12  *  *  *  mail root -s "at 12:00" </root/.bashrc

#分 时  日 月 周 |<-------------命令串------------------>|

默认情况下,任何用户只要不被列入/etc/cron.deny当中,那么他就可以直接执行“crontab -e”去编辑自己的例行性命令了。当用户使用crontab这个命令来新建工作调度之后,该项工作就会被记录到/vart/spool/cron里面去了,而且是以帐号来作为判别的。

crontab命令的特殊字符:

  *   代表任何时刻都接受的意思

  ,    代表分隔时段的意思,举例:要执行工作3:00和6:00时,就是 0 3,6  *  *  * cdommand

  -    代表一段时间范围内,

  /n    即是第隔n单位间隔的意思

举例:*/5 * * * * command  即是每隔5分钟执行一次这个命令

 可能有时处于停机状态时,crontab命令就不能执行,这时就需要anacron来可唤醒停机期间的工作任务

  anacron 以天为单位或者在开机后立刻进行anacron的操作,它会去检测停机期间应该进行但是并没有进行的crontab任务,并将该任务执行一遍,然后anacron就会自动停止了。

   由于/etc/cron.daily内的任务比较多,因此我们使用每天进行的任务来解释一下anacron的运行情况好了。anacron若执行“anacron -scron.daily”时,它会这样运行的:

    1.由/etc/anacrontab分析到cron.daily这项工作名称的天数为1天;

    2.由/var/spool/anacron/cron.daily取出最近一次执行anacron的时间戳;

    3.由上个步骤与目前的时间比较,若差异天数为1天以上(含1天),就准备进行命令;

    4.若准备进行命令,根据/etc/anacrontab的设置将延迟65分钟;

    5.延迟时间过后,开始执行后续命令,即“run-parts /etc/cron.daily"这个命令;

    6.执行完毕后,anacron程序结束。

   现在你知道为什么隔了一阵子才将linux开机时,开机过后约1小时左右系统会有一小时段的忙碌,而且硬盘会跑个不停!那是因为anacron正在执行过去crontab未执行的各项工作调度。

  进程管理:

   jobs  -l

注:其实+代表最近被放到后台的工作号码,-代表最近最后第二个被放置到后台中的工作号码。而超过最后第三个以后的工作,就不会有+、-符号存在了!

工作状态是stopped,若工作状态为done,说明已经结束了,即便是最近没有+号,当你在执行一次jobs,就已经看不到该工作了。

  进程的执行顺序  

  priority与nice 

 

   PRI 值越低代表越优先,这个PRI的值是由内核动态调整的,用户无法直接调整PRI值,

   可通过Nice值,

   PRI(new)=PRI(old)+nice

  nice值可以调整的范围为-20—19;(root)

     普通用户调整的范围为0—19

  nice 是对即将执行的命令

   #用root给一个nice值为-5,用于执行vi,并查看该进程!

   [root@www ~]nice -n -5  vi  &

  renice  是对正在执行的执行

   renice [number] PID

   [root@www ~]renice 10  18625

 

  kill -signal PID

  可以帮我们将这个signal传送给某个工作(%jobnumber)或者是某个PID(直接输入数字。要再次强调的是:kill后面直接加数字与加上%jobnumber的情况是不同的!这个很重要。因为工作控制中有1号工作,但是PID1号则是专指“init”这个进程。你怎么可以将init关闭呢?关闭init,你的系统就死掉了啊!所以记得那个%是专门用在工作控制的。

     举例:如下图:用vim在后台运行,用jobs查看,并想通过kill 1来删除该工作号,发现并不能成功,会弹出说是不允许的操作,因为kill 1并不是杀掉1号工作,而是关闭init,即系统的主进程,当然是不允许的了。

应该用kill %1,就能正确关闭1号工作了。

 killall -signal   命令名称

  由于kill后面必须要加上PID(或者是jobnumer),所以,通常kill都会配合ps,pstre等命令,因为我们必须要找到相对应的那个进程的ID。但是,如此一来,很麻烦,可以直接用killall 其后直接跟命令名称,

    killall -1 httpd  可以让PID重新读取自己的配置文件,类似重新启动httpd服务

    也可以用 pkill  -1  httpd

  killall -9 httpd  强制终止所有以httpd启动的进程;

  killall -i  bash  依次询问每一个bash进程是否需要被终止进行。

 总之,要删除某个进程,我们可以使用PID或者启动该进程的命令名称,而如果要删除某个服务呢,最简单的方法就是利用killall,因为它可以将系统当中所有以某个命令名称启动的进程全部删除。

 


本文转自 刘园  51CTO博客,原文链接:http://blog.51cto.com/colynn/1011482


相关文章
|
25天前
|
资源调度 Linux 调度
Linux c/c++之进程基础
这篇文章主要介绍了Linux下C/C++进程的基本概念、组成、模式、运行和状态,以及如何使用系统调用创建和管理进程。
29 0
|
4天前
|
监控 Unix Linux
|
2天前
|
消息中间件 存储 Linux
|
8天前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
10 1
|
20天前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
【10月更文挑战第9天】本文将深入浅出地介绍Linux系统中的进程管理机制,包括进程的概念、状态、调度以及如何在Linux环境下进行进程控制。我们将通过直观的语言和生动的比喻,让读者轻松掌握这一核心概念。文章不仅适合初学者构建基础,也能帮助有经验的用户加深对进程管理的理解。
16 1
|
25天前
|
消息中间件 Linux API
Linux c/c++之IPC进程间通信
这篇文章详细介绍了Linux下C/C++进程间通信(IPC)的三种主要技术:共享内存、消息队列和信号量,包括它们的编程模型、API函数原型、优势与缺点,并通过示例代码展示了它们的创建、使用和管理方法。
22 0
Linux c/c++之IPC进程间通信
|
25天前
|
Linux C++
Linux c/c++进程间通信(1)
这篇文章介绍了Linux下C/C++进程间通信的几种方式,包括普通文件、文件映射虚拟内存、管道通信(FIFO),并提供了示例代码和标准输入输出设备的应用。
17 0
Linux c/c++进程间通信(1)
|
25天前
|
Linux C++
Linux c/c++之进程的创建
这篇文章介绍了在Linux环境下使用C/C++创建进程的三种方式:system函数、fork函数以及exec族函数,并展示了它们的代码示例和运行结果。
28 0
Linux c/c++之进程的创建
|
2月前
|
Linux Shell
6-9|linux查询现在运行的进程
6-9|linux查询现在运行的进程
|
25天前
|
Linux C++
Linux c/c++进程之僵尸进程和守护进程
这篇文章介绍了Linux系统中僵尸进程和守护进程的概念、产生原因、解决方法以及如何创建守护进程。
16 0