入手内核的前篇之进程和计划任务

概念的介绍

内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、 安全功能等。

进程,在linux系统中,触发一个事件时,系统都会将它定义成一个进程,并且给进程一个ID我们称之为PID,也就是进程号,这个进程创建与之能使用的权限和功能也和创建者有关。

在CentOS 7以前的第一个进程是init

[[email protected] ~]# pstree               #以进程树的形式显示当前进程
init─┬─NetworkManager─┬─dhclient
     │                └─{NetworkManager}
     ├─abrtd
     ├─acpid
     ├─atd
     ├─auditd───{auditd}
     ├─automount───4*[{automount}]....

而在CentOS 7上第一个进程是systemd

systemd─┬─NetworkManager─┬─2*[dhclient]
        │                └─2*[{NetworkManager}]
        ├─auditd───{auditd}
        ├─automount───4*[{automount}]
        ├─crond
        ├─dbus-daemon───{dbus-daemon}
        ├─login───bash
        ├─master─┬─pickup
        │        └─qmgr...

Process:  运行中的程序的一个 副本,是被 载入内存的一个指令集合
进程ID (Process ID ,PID )号码被用来标记各个进程
UID 、GID 、和SELinux 语境决定对文件系统的存取和 访问权限,
通常 从执行进程的 用户来继承
存在生命周期
task struct :Linux 内核存储进程信息的数据结构格式
task list :多个任务的的task struct 组成的链表

进程:都由其父进程创建,CoW #CoW写时复制技术
fork(), clone()

过程这样的

1、系统先以fork的方式复制一个与服进程相同的进程,这个进程与服进程唯一的差别就是PID不同,但是这个进程还会多一个PPID的参数,PPID就是父进程的程序识别PID。

2、然后新产生的进程开始加载实际要运行的程序进行执行。#只有进行写入操作的时候才会这样。

进程间通信

  1.主机上的进程通信可以通过signal(信号指令)、shm(共享内存空间)、semerphor(旗语)

  2.两个主机间的通信通过rpc(远程过程调用)、socket(套接字)

进程优先级:
  系统优先级: 数字越小,优先级越高
    0-139 (CentOS4,5) )
      各有140 个运行队列和过期队列
    0-98 ,99 (CentOS6) )
  实时优先级: 99-0 :值最大优先级最高
  nice 值:-20 到19 ,对应 系统优先级100-139 或99
Big O :时间复杂 度 ,用时和规模 的 关系
  O(1), O(logn), O(n) 线性, O(n^2) 抛物线, O(2^n)

进程内存

Page Frame:页框,用存储页面数据,存储Page 4k

LRU :Least Recently Used 近期最少使用算法,释放内存

物理地址空间和线性地址空间,实际使用叫物理空间

MMU :Memory Management Unit 负责转换线性和物理地址

TLB:Translation Lookaside Buffer 翻译 后备 缓冲器, 用于保存虚拟地址和物理地址映射关系的缓存 #你实际使用多少,但给你多少

IPC: Inter Process Communication

同一主机: signal: 发信号

shm: shared memory 共享内存 #两个进程要通信,他们会创建个共享内存来通信

semaphore: 信号量,一种计数器 #当你使用一个程序调用一个进程,你会给个标记表示你在使用,这样其他进程无法再次调度。

不同主机:rpc: remote procedure call #远程过程调用 当你程序使用的时候需要使用B程序调用下,调用完后返回A进程

socket: IP #unix套接字文件实现

进程状态

    linux内核:抢占式多任务 #在以前操作系统中是协作式多任务,意思是一个任务得到了CPU时间,除非它自己放弃使用CPU,否则将完全霸占CPU,而抢占式多任务系统的控制权在操作系统这,操作系统会轮询的问每个任务是否需要CPU的使用权,而过一段时间后会收回CPU使用权,将它放在最后,在去询问下一个任务,这样的好处是不会造成任务锁死

进程类型:

守护进程: daemon, 在系统引导过程中启动的进程, 和 终端无关进程

前台进程:跟终端相关,通过终端启动的进程

#两者可相互转换

进程状态:

运行态:running

就绪态:ready #等待CPU时间片 调用

睡眠态:

可中断:interruptable

不可中断:uninterruptable #比如IO操作文件,没有读取完你不能中断

停止态:stopped, 暂停于内存,但不会被调度,除非手动启动 #当你用VI编辑的时候就是这个状态

僵死态:zombie,结束进程,父进程结束前,子进程不关闭

一些命令的使用。

系统管理工具

进程的分类:

CPU-Bound :CPU 密集型,非交互 比如查找计算 排序,对CPU占用率高的进程

IO-Bound :IO密集型,交互 。等待I/O时间长的进程 #dd之类的命令

Linux 系统状态的查看及管理工具:pstree, ps, pidof,

pgrep, top, htop, glance, pmap, vmstat, dstat, kill,

pkill, job, bg, fg, nohup

pstree 命令:

pstree - display a tree of processes

ps: process state

ps - report a snapshot of the current processes

Linux 系统各进程的相关信息均保存在/proc/PID 目录下的各文件中。

列举进程ps

支持三种选项:

UNIX 选项 如 如-A -e

[[email protected] ~]# ps -A -e   #-A和 -e 效果是一样的。
   PID TTY          TIME CMD
     1 ?        00:00:03 systemd
     2 ?        00:00:00 kthreadd
     3 ?        00:00:02 ksoftirqd/0
     7 ?        00:00:00 migration/0
     8 ?        00:00:00 rcu_bh

BSD 选项 如 如a

[[email protected] ~]# ps a
   PID TTY      STAT   TIME COMMAND
  2180 tty1     Ss+    0:00 -bash
  6810 pts/0    Ss     0:00 -bash
  7231 pts/0    R+     0:00 ps a

GNU 选项 如 如--help

...

常用组合:-ef

-e: 显示所有进程

-f: 显示完整格式程序信息

常用组合:-eFH

-F: 显示更完整格式的进程信息

-H: 以进程层级格式显示进程相关信息

常用组合:自定义

-eo pid,tid,class,rtprio(优先级),ni,pri,psr,

pcpu,stat,comm

axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid, #挑一些显示,多个选项用逗号隔开

pid,pcpu,comm,cmd

euid:有效用户

      ruid:实际用户执行命令的人

这三种选择一种适合自己的就好。

top命令类似windows下的任务管理器

一些常用指令

选项 说明
-d 指定每两次屏幕信息刷新之间的时间间隔
-i 不显示限制或者僵死的进程信息
-c 显示进程的整个命令路径,而不是只显示命令名称
-s 使top命令在安全模式下运行。此时top的交互式指令被取消,避免潜在危险
-b 分屏显示输出信息,结合“-n”选项可以将屏幕信息输出到文档
-n top输出信息更新的次数,完成后将退出top命令

 还有一些交互式命令      

top :有许多内置命令:

排序:

P :以占据的CPU 百分比,%CPU

M :占据内存百分比,%MEM

T :累积占据CPU 时长,TIME+

首部信息显示:

uptime 信息:l 命令

tasks 及cpu 信息:t 命令

cpu 分别显示:1 ( 数字) #可以显示具体每个CPU情况

us :用户空间

sy :内核空间

ni :调整nice 时间

id :空闲

wa :等待IO 时间

hi :硬中断 #硬件资源操作

si :软中断(模式切换)进程切换

st :虚拟机偷走的时间

memory 信息:m 命令 #内存信息

退出命令:q

修改刷新时间间隔:s

终止指定进程:k

保存文件:W #存在家目录下 .toprc

top输出分为统计信息区和进程信息区两个部分,

1)统计信息区

  • 01:34:10:表示当前系统时间。
  • up 14:20:表示系统已经运行的时间
  • 2 users:当前登录系统的用户数
  • load average :表示系统平均负载,三个数值分别表示1分钟 5分钟 15分钟到现在的系统平均负载值。


第二行和第三行分别是进程和CPU信息

  • Tasks:113 total:进程的总数。
  • 2 running:正在运行的进程。
  • 111 sleeping:处于休眠状态的进程。
  • 0 stopped:停止的进程数。
  • 0 zombie:僵死的进程数。
  • %Cpu(s):0.0us:表示用户进程占用CPU的百分比。
  • 0.3 sy:系统进程占用CPU的百分比。
  • 0.0 ni:用户进程空间内改变过优先级的进程占用CPU的百分比。
  • 99.7 id:空闲CPU占用的百分比。
  • 0.0 wa:等待输入、输出的进程占用CPU的百分比。


最后 两行输出的是内存信息

  • KiB Mem:483856 total:系统的物理内存大小。
  • 64972 free:目前空余内存大小。
  • 115984 used:已经使用的物理内存大小。
  • 302900 buff/cache:用作内核缓冲区的内存大小。
  • KiB Swap:2097148 total:交换分区内村大小。
  • 2096352 free:空闲的交换分区大小。
  • 796 used:已经使用的交换分区大小。
  • 309652 avail Mem:缓存大小。


进程信息区

进程信息区显示了每个进程的运行状态,我们先来看一下每列输出的含义。

  • PID:进程的ID。
  • USER:进程所有者的用户名。
  • PR:进程优先级。
  • NI:nice值。负值表示高优先级,正值表示低优先级。
  • VIRT:进程使用的虚拟内存总量,单位KB. VIRT=SWAP+RES。
  • RES:进程使用的、未被患处的物理内存大小,单位KB。RES=CODE+DATA,其中,CODE为执行代码占用的物理内存大小,DATA为数据占用的内存大小。
  • SHR:共享内存大小,单位KB。
  • S:进程状态,D表示不可终端的睡眠状态,R表示运行状态,S表示睡眠状态,T表示跟踪/停止,Z表示僵死进程。
  • %CPU:上次更新到现在的CPU时间占用百分比。
  • %MEM:进程占用的物理内存百分比。
  • TIME+:进程总计使用的CPU时间,单位为1/100秒。
  • COMMAND:正在运行进程的命令名或者命令路径。

进程优先级调整:

静态优先级:100-139

进程默认启动时的nice 值为0 ,优先级为120

只有根用户才能降低nice 值(提高优先性)

nice 命令:

nice [OPTION] [COMMAND [ARG]...]

nice -n 10 ping 127.0.0.1 #指定优先级运行

特殊用法:nice --6 d if=/dev/zero of=/dev/null

renice 命令: #能根据PID修改优先级

renice [-n] priority pid...

查看:

ps axo pid,comm,ni

搜索进程

最灵活:ps 选项 | 其它命令

按预定义的模式:pgrep

pgrep [options] pattern

-u uid: effective user ,生效者

-U uid: real user ,真正发起运行命令者

-t terminal: 与指定终端相关的进程

pgrep -lt pts/1

-l: 显示进程名

-a: 显示完整格式的进程名 #centos 7上才有的选项

-P pid: 显示指定进程的子进程

按确切的程序名称:/sbin/pidof

pidof bash #查看进程编号,这个命令是软链接,但是链接对象你不能用

一个进程可以拥有多个线程,但线程不能单独存在。

一个进程里多个线程之间的资源是共享的,线程消耗资源是很少的

uptime

显示当前时间,系统已启动的时间,也能显示负载情况。load Average 1 5 10分钟内的负载

一个CPU内核当前活动进程数不大于3,表示正常,超过5系统性能就有问题。

#脚本里第一行不写bash 执行的是命令,你用ps aux | grep f1.sh #会搜索不到

vmstat 命令:虚拟内存信息

vmstat [options] [delay [count]]

vmstat 2 5

procs:

r :可运行(正运行或等待运行)进程的个数,和核心数有关

b :处于不可中断睡眠态的进程个数( 被阻塞的队列的长度)

memory: :

swpd: 交换内存的使用总量

free :空闲物理内存总量

buffer :用于buffer 的内存总量

cache :用于cache 的内存总量

swap:

si :从磁盘交换进内存的数据速率(kb/s)

so :从内存交换至磁盘的数据速率(kb/s)

io:

bi :从块设备读入数据到系统的 速率(kb/s)

bo: 保存数据至块设备的 速率

system:

in: interrupts 中断速率,包括时钟

cs: context switch 进程切换速率

cpu:

us:Time spent running non-kernel code

sy: Time spent running kernel code

id: Time spent idle. Linux 2.5.41 前, 包括IO-wait time.

wa: Time spent waiting for IO. 2.5.41 前,包括in idle.

st: Time stolen from a virtual machine. 2.6.11 前, unknown.

选项:

-s: 显示内存数据

[[email protected] ~]# vmstat 1 3         #一秒显示依次,3次后结束
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0   1340  90868      0 253020    0    0     5     4   40   53  0  0 100  0  0
 0  0   1340  90852      0 253020    0    0     0     0  122  173  0  1 99  0  0
 0  0   1340  90852      0 253020    0    0     0     0  121  164  0  0 100  0  0
[[email protected] ~]# 

iostat: 统计CPU 和设备IO 信息

示例:iostat 1 10

pmap 命令:进程对应的内存映射

写数字表示进程号,然后看内存映射信息

/proc/1/masp #地址

pmap [options] pid [...]

-x: 显示详细格式的信息

示例:pmap 1

另外一种实现:

cat /proc/PID/maps

[[email protected] ~]# cat /proc/1/maps
7fd420000000-7fd420029000 rw-p 00000000 00:00 0
7fd420029000-7fd424000000 ---p 00000000 00:00 0
7fd42778b000-7fd42778c000 ---p 00000000 00:00 0
7fd42778c000-7fd427f8c000 rw-p 00000000 00:00 0
7fd427f8c000-7fd427f8d000 ---p 00000000 00:00 0
7fd427f8d000-7fd42878d000 rw-p 00000000 00:00 0
7fd42878d000-7fd428791000 r-xp 00000000 fd:00 67235606                   /usr/lib64/libuuid.so.1.3.0
7fd428791000-7fd428990000 ---p 00004000 fd:00 67235606 

[[email protected] ~]# pmap 1
1:   /usr/lib/systemd/systemd --switched-root --system --deserialize 21
00007fd420000000    164K rw---   [ anon ]
00007fd420029000  65372K -----   [ anon ]
00007fd42778b000      4K -----   [ anon ]
00007fd42778c000   8192K rw---   [ anon ]
00007fd427f8c000      4K -----   [ anon ]
00007fd427f8d000   8192K rw---   [ anon ]
00007fd42878d000     16K r-x-- libuuid.so.1.3.0
00007fd428791000   2044K ----- libuuid.so.1.3.0

dstat 命令:系统资源统计, 代替vmstat,iostat
dstat [-afv] [options..] [delay [count]]
    -c:  显示cpu 相关信息
    -C #,#,...,total
    -d:  显示disk 相关信息
    -D total,sda,sdb,...
    -g :显示page 相关统计数据
    -m:  显示memory 相关统计数据
    -n:  显示network 相关统计数据
    -p:  显示process 相关统计数据
    -r:  显示io 请求相关的统计数据
    -s:  显示swapped

kill 命令:

向进程发送控制信号,以实现对进程管理, 每个信号对应一个数字,

信号名称以SIG 开头(可省略 ), 不 区分大小写

显示当前系统可用信号: kill –l,trap -l

常用信号:man 7 signal

1) SIGHUP: 无须关闭进程而让其重读配置文件

2) SIGINT: 中止正在运行的进程;相当于Ctrl+c

3) SIGQUIT: 相当于ctrl+\

9) SIGKILL: 强制杀死正在运行的进程 #不是什么进程都能杀死比如bash

15) SIGTERM :终止正在运行的进程 #默认是15,有的进程这么杀不死

18) SIGCONT :继续运行

19) SIGSTOP :后台休眠

#如果在后台运行的程序,用它也能进行休眠

指定信号的方法:

(1) 信号的数字标识:1, 2, 9

(2) 信号完整名称:SIGHUP (3) 信号的简写名称:HUP

按PID :kill [-SIGNAL] pid …

kill –n SIGNAL pid;kill –s SIGNAL pid

按名称:killall [-SIGNAL] comm…

按模式:pkill [options] pattern

-SIGNAL

-u uid: effective user ,生效者

pkill -9 -u wang

-U uid: real user ,真正发起运行命令者

-t terminal: 与指定终端相关的进程

-l: 显示进程 名(pgrep 可用)

-a: 显示完整格式的进程 名( (pgrep 可用)

-P pid: 显示指定进程的子进程

Linux 的作业控制

前台作业:通过终端启动,且启动后一直占据终端;

后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)

让作业运行于后台

(1) 运行中的作业: Ctrl+z

送到后台并休眠

(2) 尚未启动的作业:# COMMAND &

后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭

后台作业。如果希望送往后台后,剥离与终端的关系

nohup COMMAND & #screen;COMMAND

送到后台运行不与终端有关

默认是有输出的,可以重定向到垃圾箱

nohup.out #结果这个文件下会有

screen #新开终端,跟sshd没关系

-ls 查看会话

查看当前终端所有作业:

jobs #这个只能在当前终端看当前终端的后台运行进程

后台两种状态

运行:

休眠:stop

作业控制:

fg [[%]JOB_NUM] :把指定的后台作业调回前台

bg [[%]JOB_NUM] :让送往后台的作业在后台继续运行

kill [%JOB_NUM]: 终止指定的作业

kill %1 #结束编号作业,需要用jobs先查看

对于任务的加速完成

f1.sh;f2.sh;f3.sh #这是顺序执行达不到效果

同时运行多个进程,提高效率

方法1 #必须放入后台执行

vi all.sh

f1.sh&

f2.sh&

f3.sh&

方法2

(f1.sh&);(f2.sh&);(f3.sh&) #会开子进程

方法3

{ f1.sh& f2.sh& f3.sh& }

#at命令如果时间过了,会明天去执行

包:at

at 命令:at [option] TIME

常用选项:

-V 显示版本信息:

-l: 列出指定队列中等待运行的作业;相当于atq

-d: 删除指定的作业;相当于atrm

-c: 查看具体作业任务

-f /path/from/somefile :从指定的文件中读取任务

-m: 当任务 被完成之后,将给用户发送邮件,即使没有标准输出

注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户

TIME: 定义出什么时候进行 at 这项任务的时间

HH:MM [YYYY-mm-dd]

20:20 2016-10-10

noon, midnight, teatime (4pm) #英文单词也能用

tomorrow #明天

now+#{minutes,hours,days, OR weeks}

at now+10minutes #10分钟后自动执行

HH:MM 02:00 在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务

HH:MM YYYY-MM-DD 02:00 2016-09-20

规定在某年某月的某一天的特殊时刻进行该项任务

HH:MM[am|pm] [Month] [Date]

04pm March 17

17:20 tomorrow

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

在某个时间点再加几个时间后才进行该项任务

now + 5 minutes

02pm + 3 days

执行方式:

1)交互式 )输入重定向 3 )at –f 文件

依赖与atd 服务, 需要启动才能实现at 任务

at 队列存放在/var/spool/at 目录中

/etc/at.{allow,deny} 控制用户是否能执行at 任务

白名单:/etc/at.allow 默认不存在,只有该文件中的用户

才能执行at 命令

黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行

at 命令, 而没有在 在at.deny 文件中的使用 者则可执行

如果 两个文件都不存在有 ,只有 root 行 可以执行 at

/etc/at.deny

wang

mage

/etc/at.allow

#这个两个用户会因为写入这个文件而不能执行。

#如果两个文件都写了该用户。白名单权限更高。设置白名单后,一切以白名单为主,如果这两个文件都没有,除了root全部拒绝

例:

[[email protected] ~]# cat /etc/rc.d/init.d/atd   #命令状态确认 CentOS 6
#!/bin/sh
#
# atd Starts/stop the "at" daemon
#
# chkconfig:   345 95 5
# description: Runs commands scheduled by the "at" command at the time #    specified when "at" was run, and runs batch commands when the load #    average is low enough.
...省略
[[email protected] ~]# runlevel #确认是否启动
3 5

[[email protected] ~]# service atd status   #查看当前状态
atd (pid  1913) 正在运行...

[[email protected] ~]# chkconfig --list atd
atd             0:关闭  1:关闭  2:关闭  3:启用  4:启用  5:启用  6:关闭

[[email protected] ~]# cat /lib/systemd/system/atd.service  #CentOS 7上的状态确认
[Unit]
Description=Job spooling tools
After=syslog.target systemd-user-sessions.service

[Service]
EnvironmentFile=/etc/sysconfig/atd
ExecStart=/usr/sbin/atd -f $OPTS
...

[[email protected] ~]# systemctl is-enabled atd   #确认开机是否启动
enabled

[[email protected] ~]# systemctl status atd.service  #  #确认是否启动,.service可以省略
● atd.service - Job spooling tools
   Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

[[email protected] ~]# at 09:28    #默认交互模式,echo这类终端打印 命令没打印的原因是他以邮件方式发送给root。只要标准输出命令都要输出到/dev/null避免太多垃圾邮件
at> echo at is starting
at> <EOT>
job 3 at Wed May 10 09:28:00 2017

[[email protected] ~]# at -l     #可以看到没执行的计划任务,相当于atq命令
2       Wed May 10 09:24:00 2017 a root
3       Wed May 10 09:28:00 2017 a root

at命令关机也不会丢  因为会放在 /var/spool/at/... 文件里

[[email protected] ~]# getent passwd daemon   #系统用户,查看情况
daemon:x:2:2:daemon:/sbin:/sbin/nologin

at -d 4 #删除4这个计划任务

atrm 5 #删除计划任务5

at -c 7 #查看具体情况,就是看/var/spool/at这个文件

at -f atjob #直接调用文件 和sed -f 里的效果差不多。

at -m 14:34

touch 1.log

周期性任务计划:cron

相关 的程序包:

cronie: 主程序包,提供crond 守护进程及相关辅助工具

cronie-anacron :cronie 的补充 程序,用于 监控cronie任务执行 状况,如cronie 中的任务在过去该运行的时间点未能正常运行,则anacron 会随后启动一次此任务。

crontabs :包含CentOS 提供系统维护任务

chkconfig --list crond #查看启动没有

service crond status #查看启动没有

systemctl status crond #7上查看启动没有

/usr/sbin/crond #真正的程序在这

/var/spool/cron #你做的计划任务会在这

确保crond 守护处于运行状态:

CentOS 7:

systemctl status crond

CentOS 6:

service crond status

计划周期性执行的任务提交给crond ,到指定时间会自动运行

系统cron 任务:系统维护作业

/etc/crontab

用户cron 任务:

crontab 命令

日志:/var/log/cron

时间表示法:

(1) 特定值

给定时间点有效取值范围内的值

(2) *

给定时间点上有效取值范围内的所有值

表示“每...”

(3) 离散取值

#,#,#

4) 连续取值

#-#

(5) 在指定时间范围上,定义步长

/#: # 即为步长

@reboot Run once after reboot.

@yearly 0 0 1 1 *

@annually 0 0 1 1 *

@monthly 0 0 1 * *

@weekly 0 0 * * 0

@daily 0 0 * * *

@hourly 0 * * * *

示例:每3 小时echo 和wall 命令

0 */3 * * * centos /bin/echo “howdy”;/usr/bin/wall

“welcome to Magedu!

系统cron 任务:/etc/crontab

注释行以 # 开头

# 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) OR

sun,mon,tue,wed,thu,fri,sat

# | | | | |

# * * * * * user-name command to be executed

例如:晚上9 点10 分运行echo 命令

10 21 * * * centos /bin/echo "Howdy!"

#写计划任务的时候必须写明确路径让文件知道在哪找,因为不一定用一个shell。

例:

30 2 1-10,20-25 root /bin/touch /app/cron.log #写普通用户也行,但普通用户不一定有资格

* #*代表每分钟

cp -a /etc/ /paa/etcbak-`date +%F`/ #复制一个文件,因为有%所以不会成功

* * * * * root cron.sh #写入脚本调用就好,最后两个*是或,其他三个是并且。如果想实现并且,就脚本里写。

@reboot root touch /app/reboot.log #重启后执行

/var/spool/cron/ #用命令创建的才放到这里,文件里写入不存在

系统的计划任务:

/etc/crontab #可以修改文件达成,给管理员用的

/etc/cron.d/ 配置文件 #和上面那个路径差不多

/etc/cron.hourly/ 脚本

#run-parts /etc/cron.hourly #去运行这个目录下所有脚本

/etc/cron.daily/ 脚本

/etc/cron.weekly/ 脚本

/etc/cron.monthly/ 脚本

anacron

运行计算机关机时cron 不运行的任务,CentOS6 以后版本

取消anacron 服务,由crond 服务管理

对笔记本电脑、台式机、工作站、偶尔要关机的服务器及其

它不一直开机的系统很重要对很有用

配置文件:/etc/anacrontab ,负责执行/etc/ cron.daily /etc/cron.weekly /etc/cron.monthly 中系统任务。

? 字段1 :如果在这些日子里没有运行这些任务……

? 字段2 :在重新引导后等待这么多分钟后运行它

? 字段3 :任务识别器,在日志文件中标识

? 字段4 :要执行的任务

由/etc/cron.hourly/0anacron 执行

当执行任务时,更新/var/spool/anacron/cron.daily 文件的时间戳

/usr/bin/on_ac_power #把电源拔了试试

whatis rm #查看数据库里这个命令的

#/etc/cron.daily

logrotate #用来发现日志文件是否过大,过大会分割创建个文件,保证文件不会太大

mandb #更新数据库 7上

mlocate

#ls /etc/cron.daily/ #脚本目录

#cat /etc/cron.daily/tmpwatch #这个文件会自动清除一些临时文件

CentOS6 使用/etc/cron.daily/tmpwatch 定时清除临时文件

CentOS7 使用systemd-tmpfiles-setup 服务实现

配置文件:

/etc/tmpfiles.d/*.conf

/run/tmpfiles.d/*.conf

/usr/lib/tmpfiles/*.conf

/usr/lib/tmpfiles.d/tmp.conf

d /tmp 1777 root root 10d

d /var/tmp 1777 root root 30d

命令:

systemd-tmpfiles –clean|remove|create configfile

#有特殊权限

用户cron:

crontab 命令定义,每个用户都有专用的cron 任务文件:/var/spool/cron/USERNAME

crontab 命令:

crontab [-u user] [-l | -r | -e] [-i]

-l: 列出所有任务 #默认只看自己的加-u才能看别人的

-e: 编辑任务;

#会创建个临时文件,不用写用户了

cd /var/spool/cron/ #文件放在这

-r: 移除当前用户所有任务

-i :同-r 一同使用,以交互式模式移除指定任务

-u user: 仅root 可运行,指定用户管理cron 任务

控制用户执行计划任务 :

/etc/cron.{allow,deny} #和at里的道理一样。 #默认也是没有allow,如果已经有了计划任务,还是会执行,因为改的是命令现在的权限了。

#用这个命令修改后,会删除旧文件,生成新文件。

export EDITOR=vim #使很多程序默认使用vim

vipw 相当于/etc/passwd #有语法检查功能

/var/log/cron #计划任务的日志。如果误删除在这找。

一次性作业使用 at

重复性作业使用crontab

Create at time crontab -e

List at -l crontab -l

Details at -c jobnum N/A

Remove at -d jobnum crontab -r

Edit N/A crontab -e

#没有被重定向的输出会被邮寄给用户

#根用户能够修改其它用户的作业

注意:运行结果的标准输出和错误以邮件通知给相关用户

(1) COMMAND > /dev/null

(2) COMMAND &> /dev/null

对于cron 任务来讲,% 有特殊用途;如果在命令中要使用%,则需要转义,将%

时间: 2024-11-07 00:39:28

入手内核的前篇之进程和计划任务的相关文章

Linux内核(2.6)进程调度算法

1.1      进程状态 在Sched.h(include\linux)中定义了进程的状态. /* *Task state bitmask. NOTE! These bits are also *encoded in fs/proc/array.c: get_task_state(). * * Wehave two separate sets of flags: task->state * isabout runnability, while task->exit_state are *ab

Linux内核源码学习之进程切换细节整理

linux中的进程是个最基本的概念,进程从运行队列到开始运行有两个开始的地方, 一个就是switch_to宏中的标号1:"1:/t",//只要不是新创建的进程,几乎都是从上面的那个标号1开始的,而switch_to宏则是除了内核本身,所有的进程要 想运行都要经过的地方 另 一个就是ret_form_fork 这样看来,虽然linux的进程体系以及进程调度非常复杂,但是总体看来就是一个沙漏状, 对于系统中的每个新进程它首次被执行的过程必然是: sys_fork---->do_for

Linux内核分析-使用gdb跟踪调试内核从start_kernel到init进程启动

姓名:江军 ID:fuchen1994 实验日期:2016.3.13 实验指导 使用实验楼的虚拟机打开shell cd LinuxKernel/ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 内核启动完成后进入menu程序(<软件工程C编码实践篇>的课程项目),支持三个命令help.version和quit,您也可以添加更多的命令,对选修过<软件工程C编码实践篇>的童鞋应该是a piece of

Linux内核工程导论——用户空间进程使用内核资源

本文大部分转载和组装,只是觉得这些知识应该放到一起比较好. 进程系统资源的使用原理 大部分进程通过glibc申请使用内存,但是glibc也是一个应用程序库,它最终也是要调用操作系统的内存管理接口来使用内存.大部分情况下,glibc对用户和操作系统是透明的,所以直接观察操作系统记录的进程对内存的使用情况有很大的帮助.但是glibc自己的实现也是有问题的,所以太特殊情况下追究进程的内存使用也要考虑glibc的因素.其他操作系统资源使用情况则可以直接通过proc文件系统查看. 进程所需要的系统资源种类

Linux内核进程调度的时机和进程切换

陈铁+ 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 对于现代操作系统,多任务是必备的,在linux系统下,进程会不断的被内核调度,从X进程切换为Y进程,以实现用户所见到的多任务状态,下面我们就看一看这样的过程,分析一下内核如何对进程调度,以及进程间如何切换. 内核使用schedule()函数实现进程的调度,而通常的用户进程要无法主动调度这个函数,只能通过中断处理过程(包括时钟中断

【读书笔记】《Linux内核设计与实现》进程管理与调度

大学跟老师做嵌入式项目,写过I2C的设备驱动,但对Linux内核的了解也仅限于此.Android系统许多导致root的漏洞都是内核中的,研究起来很有趣,但看相关的分析文章总感觉隔着一层窗户纸,不能完全理会.所以打算系统的学习一下Linux内核.买了两本书<Linux内核设计与实现(第3版)>和<深入理解Linux内核(第3版)> 0x00 一些废话 面向对象思想. Linux内核虽然是C和汇编语言写的,没有使用面向对象的语言,但里面却包含了大量面向对象的设计.比如可以把内核中的进程

《Linux内核》第七周 进程的切换和系统的一般执行过程 20135311傅冬菁

进程的切换和系统的一般执行过程 一.内容总结与分析 进程调度与进程调度时机 进程调度需求的分类: 第一种分类方式: I/O -bound(频繁进行I/O,通常会花很多时间等待I/O操作) CPU-bound(计算密集型.需要花大量CPU时间进行运算) 第二种分类方式: 批处理进程(后台进行,典型:编译程序.科学计算) 实时进程(有实时需求响应时间短.稳,典型:视频.音频.机械控制) 交互式进程(与用户交互多,响应时间要快,典型:shell.文本编辑程序.图形应用程序) Linux调度基于分时和优

WCF研究-前篇

前篇 1.从SOA说起 2.什么是WCF 3.WCF通信模型 4.Endpoint与ABC以及元数据 1.SOA (Service Oriented  Architecture) Ø 一种组件架构模型 Ø 主要特点 每个服务具有明确的服务边界. 服务独立,低耦合. 采用标准的契约定义和通信协议. 服务是自解释的. 2.WCF (Windows Communication  Foundation) Ø 是微软为SOA(Service-Oriented  Architecture)而设计的一套完整的

linux 下取进程占用 cpu/内存 最高的前10个进程

1. linux 下 取进程占用 cpu 最高的前10个进程ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head ps auxw|head -1;ps auxw|sort -rn -k3|head -10 2.linux 下 取进程占用内存(MEM)最高的前10个进程ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head ps auxw|head -1;ps auxw|sort -rn -k