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

Linux计划任务与进程管理

文章目录计划任务crond配置文件crond任务管理crond时间格式crond书写规范进程管理systemdUnitUnit类型systemctl进程分类前台进程守护进程进程状态

文章目录

  • 计划任务
    • crond配置文件
    • crond任务管理
    • crond时间格式
    • crond书写规范
  • 进程管理
    • systemd
    • Unit
    • Unit类型
    • systemctl
    • 进程分类
      • 前台进程
      • 守护进程
    • 进程状态
    • 进程优先级
      • nice
      • 进程优先级调整
    • 进程管理命令
      • ps(process state)
      • pstree
      • pgrep
      • pidof
      • vmstat
      • 后台运行作业
      • jobs
      • fg
      • bg
      • kill
      • top




计划任务

crond配置文件

/etc/crontab //crontab配置文件
/etc/cron.deny //该文件中所列用户不允许使用crontab命令
/var/spool/cron/* //所有用户定时文件都存放此目录,文件以用户名命名
/var/log/cron //定时任务执行后的日志文件,可用来回溯

crond任务管理


  • crond [选项]

  • 常用选项:

    • -e 编辑crontab文件内容 crontab -e
    • -l 查看crontab文件内容 crontab -l
    • -r 删除crontab文件内容 crontab -r
    • -u 管理其他用户的计划任务 crontab -u bad -l
  • 直接修改/var/spool/cron/username


创建计划任务是RHCSA中必考的一道题目,所以需要知道怎么创建计划任务,以及使用其他用户创建计划任务


crond时间格式

# Example of job definition:
# .---------------- minute (0 - 59) //分钟
# | .------------- hour (0 - 23) //小时
# | | .---------- day of month (1 - 31) //日期
# | | | .------- month (1 - 12) OR jan,feb,mar,apr //月份
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed* //表示任意的(分、时、日、月、周)时间都执行
- //表示一个时间范围段
, //表示分隔时段
*/n //表示每隔n单位时间, 如*/10 每10分钟

crond书写规范

脚本开头建议填写注释信息, 包括执行时间、周期、任务
计划任务执行脚本存放的路径/scripts/
执行shell脚本任务前加/bin/sh, 脚本结尾加&>/dev/null
例如:30 01 * * * /bin/sh /scripts/www_backup.sh &>/dev/null
调试好后应屏蔽debug输出信息,避免产生系统垃圾占用过多inode, 如需输出日志, 可重定向至日志文件
例如:30 01 * * * /bin/sh /scripts/www_backup.sh &>/tmp/www_backup.log

进程管理

systemd


  • systemd是系统启动的第一个进程,即/sbin/init
  • 配置文件:/usr/lib/systemd/system,/etc/systemd/system

Unit


  • systemd使用unit的概念来管理服务

  • 配置文件:

    • /usr/lib/systemd/system
    • /run/systemd/system
    • /etc/systemd/system

Unit类型


  • Service unit 文件扩展名为.service,用于定义系统服务
  • Target unit 文件扩展名为.target,用于模拟实现“运行级别”
    • 0 关机
    • 1 单用户模式
    • 2 多用户模式
    • 3 多用户模式
    • 4 多用户模式
    • 5 图形级别
    • 6 重启
  • Device unit 文件扩展名为.device,用于定义内核识别的设备
  • Mount unit 文件扩展名为.mount,用于定义文件系统挂载点
  • Socket unit 文件扩展名为.socket,用于标识进程间通信用的socket文件
  • Snapshot unit 文件扩展名为.snapshot,用于管理系统快照
  • Swap unit 文件扩展名为.swap,用于标识swap设备
  • Automount unit 文件扩展名为.automount,用于实现文件系统的自动挂载点
  • Path unit 文件扩展名为.path,用于定义文件系统中的一个文件或目录

systemctl


  • 语法:systemctl 命令 name[.service|.target]

  • 常用命令:

    • start name.service 启动服务
    • stop name.service 停止服务
    • restart name.service 重启服务
    • status name.service 查看服务状态
    • mask name.service 禁止设定为开机自启
    • unmask name.service 取消禁止设定为开机自启
    • enable name.service 设定某服务开机自动启动
    • disable name.service 禁止服务开机自动启动
  • 不常命令:

    • try-restart name.service 服务已经启动则重启,服务未启动则不做任何操作
    • reload-or-restart name.service 重载或重启服务
    • reload-or-try-restart name.service 重载或条件式重启服务
    • list-dependencies name.service 查看服务的依赖关系
    • is-active name.service 查看某服务当前激活与否的状态
    • is-enabled name.service 查看服务是否开机自动启动
    • isolate name.target 切换至某级别

如:

  • systemctl isolate graphical.target 切换至图形界面
  • list-unit-files --type service 查看所有服务的开机自动启动状态(是否开机自启)
  • get-default 查看默认运行级别
  • set-default name.target 设置默认运行级别
  • hybrid-sleep 混合睡眠,快照并挂起

在平时我们启动相关的服务时,可以不用末尾的.service也是可以的,有的也是可以Tab补全的


进程分类


前台进程


  • 与终端相关的进程,通过终端启动的进程

守护进程


  • daemon,与终端无关的进程(如内核),在系统引导过程中启动的进程

进程状态


  • Excuting 运行
  • Ready 睡眠
  • Uninterruptible sleep 不可中断的睡眠
  • Interruptible sleep 可中断的睡眠
  • Zombie 僵尸进程,不释放占据的内存
  • Stopped 停止,暂停于内存中,不会被调度,除非手动启动

进程优先级


  • 0-139,数字越小,优先级越高

    • 0-99:实时优先级,内核调整
    • 100-139:静态优先级,用户可控制

nice


  • nice的范围是(-20,19),-20对应100,19对应139
    • nice级别越高,优先级越低
    • nice级别越低,优先级越高

进程优先级调整


  • 调整已经启动的进程的nice值:
    • renice 优先级 进程id
  • 在启动时指定nice值:(-20,19)
    • nice -n 优先级 命令

进程信息保存在/proc/PID目录下


进程管理命令


ps(process state)


  • 列出当前进程;

  • 五种状态:

    • D 不可中断
    • R 运行
    • S 中断
    • T 停止
    • Z 僵死

描述状态标志
进程已被停止(暂停)T
进程已释放了其所有资源(pid除外)Z
进程正在CPU上运行或者正在等待于CPU上运行R
进程正处于睡眠状态,直至满足某些条件后才会启动D
进程正在等在I/O或某些条件得到满足,并且绝对不会印象信号S

  • 常用选项:

    • -a 显示所有与终端有关的进程
    • -u 显示进程是由哪个用户启动的
    • -x 显示所有与终端无关的进程

    -e //显示所有进程,与-A效果相同
    -l //以长格式显示
    -F //显示更详细的完整格式的进程信息
    -f //显示更详细的完整格式的进程信息
    -o //根据自己的需要选择要显示的字段
    -H //以进程层级格式显示进程相关信息

[root@bad ~]# ps aux | head -5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 53676 7624 ? Ss 21:40 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 23
root 2 0.0 0.0 0 0 ? S 21:40 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 21:40 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 21:40 0:00 [kworker/0:0H]

  • USER&#xff1a;用户名
  • PID&#xff1a;进程id
  • %CPU&#xff1a;进程运行占用CPU的百分比
  • %MEM&#xff1a;进程占用内存的百分比
  • VSZ&#xff1a;该进程使用的虚拟内存量&#xff0c;表示一个程序完全驻留在内存中占用的虚拟内存量
  • RSS&#xff1a;该进程占用的固定内存量
  • TTY&#xff1a;终端名
  • STAT&#xff1a;进程开启时间
  • START&#xff1a;进程的状态
  • TIME&#xff1a;该进程实际使用的CPU时间
  • COMMAND&#xff1a;进程运行指令

[root&#64;bad ~]# ps -elf | head -5
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 13419 ep_pol 21:40 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 23
1 S root 2 0 0 80 0 - 0 kthrea 21:40 ? 00:00:00 [kthreadd]
1 S root 3 2 0 80 0 - 0 smpboo 21:40 ? 00:00:00 [ksoftirqd/0]
1 S root 5 2 0 60 -20 - 0 worker 21:40 ? 00:00:00 [kworker/0:0H]

  • UID&#xff1a;用户名
  • PID&#xff1a;进程id
  • PPID&#xff1a;父进程号
  • C&#xff1a;运行的CPU编号
  • PRI&#xff1a;优先级
  • NI&#xff1a;nice值
  • STIME&#xff1a;进程的启动时间
  • TTY&#xff1a;终端名
  • TIME&#xff1a;运行时的累积时长
  • CMD&#xff1a;命令


pstree


  • 显示当前系统的进程树

pgrep


  • 在当前系统查找某些进程&#xff0c;只显示进程号

pidof


  • 根据进程名查找PID号

vmstat


  • 查看虚拟内存状态
  • 用法&#xff1a;vmstat [选项]
    • vmstat 2 表示每2秒刷新一次
    • vmstat 2 5 表示每2秒刷新一次&#xff0c;刷新5次后退出
  • 常用选项:
    • -s 显示内存的统计数据

后台运行作业


  • 在命令后跟上&符号可以生成一个后台作业
    • sleep 1000 &

jobs


  • 命令用于显示当前所有的后台作业
    • \&#43; 命令将默认操作的作业
    • \- 命令将第二个默认操作的作业

fg


  • 命令用于将后台作业调至前台运行

bg


  • bg&#43;作业号可使后台已停止的作业重新运行

kill


  • kill加上作业号可以手动杀死指定作业

top


  • 常用选项:

    • -d 设置延迟时长&#xff0c;top -d 1 表示每隔1秒刷新一次&#xff0c;默认每隔5秒刷新
    • -b 批模式翻屏显示&#xff0c;默认只实时显示一屏
  • top命令交互式子命令:

    • M 根据驻留内存大小进行排序&#xff0c;默认根据CPU百分比排序
    • P 根据CPU使用百分比进行排序
    • T 根据累计时间&#xff08;占据CPU时长&#xff09;进行排序
    • l 是否显示平均负载和启动时间
    • t 是否显示进程和CPU状态相关信息
    • m 是否显示内存相关信息
    • c 是否显示完整的命令行信息
    • q 退出top命令
    • k 终止某个进程
    • 1 显示所有CPU的信息
    • s 修改刷新时间间隔

以上内容均属原创&#xff0c;如有不详或错误&#xff0c;敬请指出。

本文作者&#xff1a; 坏坏


推荐阅读
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
author-avatar
lovely蓝衣13
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有