24 openEuler管理进程-调度启动进程

2023-11-01


操作系统管理多个用户的请求和多个任务。大多数系统都只有一个CPU和一个主要存储,但一个系统可能有多个二级存储磁盘和多个输入/输出设备。操作系统管理这些资源并在多个用户间共享资源,当用户提出一个请求时,造成好像系统被用户独占的假象。实际上操作系统监控着一个等待执行的任务队列,这些任务包括用户任务、操作系统任务、邮件和打印任务等。本节将从用户的角度讲述如何调度启动进程。

24 openEuler管理进程-调度启动进程

有时候需要对系统进行一些比较费时而且占用资源的维护工作,这些工作适合在深夜进行,这时候用户就可以事先进行调度安排,指定任务运行的时间或者场合,到时候系统会自动完成这些任务。要使用自动启动进程的功能,就需要掌握以下几个启动命令。

24.1 定时运行一批程序(at)

24.1.1 at命令

用户使用at命令在指定时刻执行指定的命令序列。该命令至少需要指定一个命令和一个执行时间。at命令可以只指定时间,也可以时间和日期一起指定。

at命令的语法格式如下:

 at [-V] [-q 队列] [-f 文件名] [-mldbv] 时间
 at -c 作业 [作业…]

24.1.2 设置时间

at允许使用一套相当复杂的时间指定方法,比如:

  • 接受在当天的hh:mm(小时:分钟)式的时间指定。如果该时间已经过去,那么就放存第二天执行。
  • 使用midnight(深夜)、noon(中午)、teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。
  • 采用12小时计时制,即在时间后面加上AM(上午)或者PM(下午)来说明是上午还是下午。
  • 指定命令执行的具体日期,指定格式为month day(月日)或者mm/dd/yy(月/日/年)或者dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。

上面介绍的都是绝对计时法,其实还可以使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为now+count time-units,now就是当前时间,time-units是时间单位,这里可以是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时等。还有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。下面通过一些例子来说明具体用法。

例如指定在今天下午4:30执行某个命令。假设现在时间是中午12:30,2022年12月11日,可用命令格式如下:

 at 4:30pm
 at 16:30
 at 16:30 today
 at now+4 hours
 at now+ 240 minutes
 at 16:30 11.12.22
 at 16:30 12/11/22
 at 16:30 Dec 11

以上这些命令表达的意义是完全一样的,所以在安排时间的时候完全可以根据个人喜好和具体情况自由选择。一般采用绝对时间的24小时计时法可以避免由于用户自己的疏忽造成计时错误,例如上例可以写成:at 16:30 12/11/22。

24.1.3 执行权限

对于at命令来说,需要定时执行的命令是从标准输入或者使用-f选项指定的文件中读取并执行的。如果at命令是从一个使用su命令切换到用户shell中执行的,那么当前用户被认为是执行用户,所有的错误和输出结果都会送给这个用户。但是如果有邮件送出的话,收到邮件的将是原来的用户,也就是登录时shell的所有者。

例如在12月12日上午22点执行slocate -u命令。在root权限下执行命令如下:

[root@superman-21 ~]# at 22:00 12/12/22
warning: commands will be executed using /bin/sh
at Mon Dec 12 22:00:00 2022
at> slocate -u
at> <EOT>
job 1 at Mon Dec 12 22:00:00 2022
[root@superman-21 ~]# 

上面的结果中,输入at命令之后,会出现提示符at>,提示用户输入命令,在此输入了slocate -u,然后按回车键。还可以输入多条命令,当所有要执行的命令输入结束后,按Ctrl+d键结束at命令。

在任何情况下,管理员账户都可以使用这个命令。对于其他用户来说,是否可以使用就取决于/etc/at.allow和/etc/at.deny文件。

24.2 周期性运行一批程序(cron)

前面介绍at命令都会在一定时间内完成一定任务,但是它只能执行一次。也就是说,当指定了运行命令后,系统在指定时间完成任务,以后就不再执行了。但是在很多情况下需要周期性重复执行一些命令,这时候就需要使用cron命令来完成任务。

24.2.1 运行机制

首先cron命令会搜索/var/spool/cron目录,寻找以/etc/passwd文件中的用户名命名的crontab文件,被找到的这种文件将装入内存。比如一个用户名为userexample的用户,对应的crontab文件应该是/var/spool/cron/userexample,即以该用户命名的crontab文件存放在/var/spool/cron目录下面。

cron命令还将搜索/etc/crontab文件,这个文件是用不同的格式写成的。cron启动以后,它将首先检查是否有用户设置了crontab文件,如果没有就转入睡眠状态,释放系统资源。所以该后台进程占用资源极少,它每分钟被换醒一次,查看当前是否有需要运行的命令。

命令执行结束后,任何输出都将作为邮件发送给crontab的所有者,或者是/etc/crontab文件中MAILTO环境变量中指定的用户。这是cron的工作原理,但是cron命令的执行不需要用户干涉,用户只需要修改crontab中要执行的命令。

24.2.2 crontab命令

crontab命令用于安装、删除或者显示用于驱动cron后台进程的表格。用户把需要执行的命令序列放到crontab文件中以获得执行,而且每个用户都可以有自己的crontab文件。

crontab命令的常用方法如下:

  • crontab -u //设置某个用户的cron服务,root用户在执行crontab时需要此参数。
  • crontab -l //列出当前用户cron服务的详细内容。
  • crontab -r //删除当前用户的cron服务。
  • crontab -e //编辑当前用户的cron服务。

例如root查看自己的cron设置。命令如下:

# crontab -u root -l

例如示例命令如下:

[root@superman-21 ~]# crontab -u root -l
30 22 * * * su - oracle -c /bakdata/bakscripts/expdp_bak.sh >&/dev/null
[root@superman-21 ~]#

24.2.3 crontab文件

在crontab文件中输入需要执行的命令和时间。该文件中每行都包括6个域,其中前5个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下:

minute hour day-of-month month-of-year day-of-week commands

对于每一项的说明如所示。

表 2 参数说明

参数 描述
minute 分钟(0~59)。
hour 小时(0~23)。
day-of-month 一个月的第几天(1~31)。
month-of-year 一年的第几个月(1~12)。
day-of-week 一周的星期几(0~6),0代表星期天。
commands 需要执行的命令。

这些项都不能为空,必须指定值。除了数字还有几个特殊的符号“*”、“/”和“-”、“,”。其中,代表所有的取值范围内的数字,/代表每的意思,“/5”表示每5个单位,“-”代表从某个数字到某个数字,“,”分开几个离散时数字。对于要执行的命令,调用的时候需要写出命令的完整路径。

例如晚上22点30分,对oracle数据库进行逻辑备份。在crontab文件中对应的行如下:

30 22 * * * su - oracle -c /bakdata/bakscripts/expdp_bak.sh >&/dev/null

每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件。此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e来编辑。用户也可以另外建立一个文件,使用“cron文件名”命令导入cron设置。

假设有个用户名为superman,它需要为自己创建的一个crontab文件。步骤如下:

  1. 首先可以使用任何文本编辑器建立一个新文件,并将向该文件加入需要运行的命令和要定期执行的时间,假设该文件为 ~/superman.cron。

  2. 然后在root权限下使用crontab命令安装这个文件,使用crontab命令使之成为该用户的crontab文件。命令如下:

    # crontab -u superman ~/superman.cron
    

    例如示例命令如下:

    [root@superman-21 ~]# vi superman.cron
    [root@superman-21 ~]# 
    [root@superman-21 ~]# crontab -u superman ~/superman.cron
    [root@superman-21 ~]# 
    [root@superman-21 ~]# crontab -u superman -l
    40 22 * * * sh /data/scripts/jfxt_bak.sh >&/dev/null
    [root@superman-21 ~]#
    [root@superman-21 ~]# ll /var/spool/cron
    总用量 8
    -rw-------. 1 root root 72 1212 22:34 root
    -rw-------. 1 root root 53 1212 22:50 superman
    [root@superman-21 ~]#
    

这样crontab文件就建立好了,可以转到/var/spool/cron目录下面查看,发现多了一个superman文件。这个文件就是所需的crontab文件。

11 说明:
cron启动后,每过一分钟读一次crontab文件,检查是否要执行里面的命令。因此该文件被修改后不需要重新启动cron服务。

24.2.4 编辑配置文件

cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此通过配置这个文件也能得到cron的服务。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式如下:

SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
MAILTO=root  //如果出现错误,或者有数据输出,数据作为邮件发给这个账号
HOME=/
#  run-parts
01  * * * *   root run-parts /etc/cron.hourly     //每个小时执行一次/etc/cron.hourly里的脚本
02 4 * * *   root run-parts /etc/cron.daily    //每天执行一次/etc/cron.daily里的脚本
22 4 * * 0  root run-parts /etc/cron.weekly     //每周执行一次/etc/cron.weekly里的脚本
42 4 1  * *  root run-parts /etc/cron.monthly     //每月执行一次/etc/cron.monthly里的脚本

image-20221212225751724 说明:
如果去掉run-parts参数,其后面就是运行的某个脚本名,而不是目录名。

image-20230224210811755

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

24 openEuler管理进程-调度启动进程 的相关文章

随机推荐

  • webpack 的热更新是如何做到的?原理是什么?

    Hot Module Replacement 简称 HMR 在不需要刷新整个页面的同时更新模块 能够提升开发的效率和体验 热更新时只会局部刷新页面上发生了变化的模块 同时可以保留当前页面的状态 比如复选框的选中状态等 在 webpack 中
  • Java课题笔记~ 日期处理

    2 8 日期处理 2 8 1 日期注入 日期类型不能自动注入到方法的参数中 需要单独做转换处理 使用 DateTimeFormat注解 需要在springmvc xml文件中添加mvc annotation driven 标签 1 在方法的
  • RSA算法

    一 资料阅读 1 RSA算法 将两个大素数相乘十分容易 但那时想要对其乘积进行因式分解却极其困难 因此可以将乘积公开作为加密密钥 2 数字签名 又称公钥数字签名 电子签章 是一种类似写在纸上的普通的物理签名 但是使用了公钥加密领域的技术实现
  • 小程序登录及AppSecret(小程序密钥)

    在授权开发以后 需要提交小程序密钥 有小程序密钥第三方才有能力获取用户的一些信息 提供一些能力 平台分别提供多种方式实现微信登录 1 调用wx login接口 静默获取openid 适用场景 无需使用用户头像 昵称 Unionid信息 2
  • Echarts基本入门(一)

    一 关于Echarts图形的基本设置都是在 option中完成的 具体的配置可以参考官网链接 https www echartsjs com zh tutorial html ECharts 20 E4 B8 AD E7 9A 84 E6
  • 单片机实现 printf 打印输出,和电脑端一样用

    在学C语言时 printf 很好用 到了单片机 ARM时却不能用 那因为库中的 printf 是定向打印到显示屏的 所以我们把 printf 重新定向打印到串口就可以了 串口助手中就可以显示打印的内容 这样我们在单片机 ARM中就可以 像电
  • 1.性能测试项目实战

    怎么开展性能测试 什么时候开始性能测试 1 先确定需不需要做 客户有明确的性能需求 当没有明确需求时 如果市场用户访问量不大 时间允许就做一个基准测试 时间不允许就不做 市场用户量比较大 需要先跟产品 需求人员确定好性能需求 再去做对应的性
  • 申请带@msn.com后缀的邮箱

    很多朋友总是抱怨申请msn邮箱时总是申请到 hotmail com的 为什么申请不到 msn com的呢 我从网上Google了一下 这个地址是申请简体中文MSN邮箱的 https accountservices passport net
  • DC/AC:单相双极性SPWM逆变电路原理设计及MATLAB/Simulink实验仿真

    单相PWM逆变电路的主电路与单相方波逆变电路相同 如图所示 只是其驱动信号不再是占空比为50 的方波 而是采用PWM控制 将宽度变化的窄脉冲作为驱动信号 PWM技术的理论基础为面积等效原理 即形状不同但面积相等的窄脉冲加之于线性惯性环节时
  • html input设置非空,input非空检查解决方案

    当前位置 我的异常网 vbScript input非空检查解决方案 input非空检查解决方案 www myexceptions net 网友分享于 2013 03 10 浏览 62次 input非空检查 code VBScrip悬赏科技
  • 简述熔断、限流、降级

    高并发场景指的是在大量用户同时访问服务时 服务能够保持稳定和高效运行的能力 常用的解决高并发场景下服务不可用问题的技术手段包括熔断 限流和降级 熔断 当服务的错误率超过一定阈值时 熔断器会自动断开服务的调用 防止错误的服务继续对系统造成负载
  • 视频教程-Java从小白到大牛第3篇 【进阶篇】-Java

    Java从小白到大牛第3篇 进阶篇 一个在IT领域摸爬滚打20多年的老程序员 软件架构师 培训讲师 IT作家 熟悉Java Kotlin Python iOS Android 游戏开发 数据库开发与设计 软件架构设计等多种IT技术 参与设计
  • python中的特殊运算符

    运算符 描述 相当于python中的关键字 or 简述 usr bin env python coding UTF 8 Time 2019 9 16 15 10 Email spirit az foxmail com File tst py
  • Unity 回合制战斗系统(中级篇)

    项目文件找出来了 老版本的脚本有报错 我在新版2019 4 21f1c1下解决了报错 战斗场景可以正常跑的 需要的同学点下面地址下载 关注就行啦不用积分 祝大家都早日学成 项目包下载 上一篇文章里实现了较为初级的回合制战斗系统 仅限与1v1
  • LabVIEW开放神经网络交互工具包【ONNX】,大幅降低人工智能开发门槛,实现飞速推理

    文章目录 前言 一 工具包内容 二 工具包下载链接 三 工具包安装步骤 四 实现物体识别 五 实现图像分割 六 自然场景下的文字识别 七 人体关键点检测 总结 前言 前面给大家介绍了自己开发的LabVIEW ai视觉工具包 后来发现有一些o
  • SCI三区论文大修笔记(已录用)

    本人5月份往Journal of Process Control期刊投了一篇论文 是基于深度学习图像序列预测的 前几天收到一审结果 大修 两个审稿人给了几篇参考文献 此贴专门用来做笔记方便自己查阅 论文1 Video salient obj
  • Shell 输入输出重定向

    1 普通重定向 命令 说明 command gt file 将输出重定向到 file command lt file 将输入重定向到 file command gt gt file 将输出以追加的方式重定向到 file n gt file
  • 共享经济与颠覆,产生的反向是什么?理念与文化

    这几年共享经济 一个字 火 身边做这个的人也很多 火的原因是 给用户带来便捷 gt 投资者不需要较大资金就可以参与 gt 收益较稳定 众筹的理念从此剥离出 从以上 分析 产品的便捷性是启动共享经济最主要的起动机 然后更多带来管理上的难题 无
  • C++SVD分解求伪逆 (Eigen库)(附C++代码)

    SVD求解矩阵伪逆过程 首先对矩阵A进行SVD分解得到U D V三个矩阵 其中D为列矩阵 是从上到下 由大到小排列的A矩阵的奇异值 若D矩阵中元素个数为n则原矩阵有n个奇异值 构建大小为V cols U cols 的S矩阵 其中S矩阵的前n
  • 24 openEuler管理进程-调度启动进程

    文章目录 24 openEuler管理进程 调度启动进程 24 1 定时运行一批程序 at 24 1 1 at命令 24 1 2 设置时间 24 1 3 执行权限 24 2 周期性运行一批程序 cron 24 2 1 运行机制 24 2 2