目录
1.计划任务
1.1单一计划任务
1.2周期性计划任务
2.系统进程管理
2.1任务管理
2.2脱机管理问题
2.3进程管理
2.4查看系统资源
3.系统服务(daemon)
3.1systemd相关知识点
3.2管理服务
3.3timer定时任务
1.计划任务 1.1单一计划任务
使用at命令,前提是atd服务启动,任务存在于/var/spool/at目录下,如果有/etc/at.allow文件,则只有文件中的用户才能使用at,如果只有/etc/at.deny文件,那么文件中的用户不能使用at,其余的用户可以,如果两个文件都没有则只有root才能使用at命令。
at [-mld] 时间:
-m:任务执行完毕,发送邮件给用户-l:列出所有用户的at计划,相当于atq-d:取消一个在at计划中的任务,后面接任务号码,相当于atrm-c:接任务号码,查看该命令的内容-f:执行具体的shell脚本
时间格式:
HH:MM:在今天的某个时间执行,如果超过该时间则明天执行
HH:MM YYYY:MM:DD:在某一个的时刻执行
HH:MM + number [minutes|hours|days|weeks]:在某个时间点在加几个时间后执行,如now +5minutes,5分钟后执行,类似的还有hours、days、weeks、month……
建议使用绝对路径。
任务的执行与终端环境无关,所以标准输入输出不会打印到当前屏幕,只会发送到用户的邮箱,可以使用echo "hello" >/etc/tty1类似的方法得到输出结果
batch:cpu空闲时才会执行该任务,默认负载少于0.8,不能指定特定的时间
1.2周期性计划任务
crontab:同at,有/etc/cron.allow和/etc/cron.deny其中之一的限制文件,依靠crond这个服务,该任务会被记录到/var/spool/cron目录中
-u username:只有root可以使用,帮其他用户建立一个计划任务-e:编辑crontab的任务内容-l:查看任务内容-r:删除所有crontab任务,若要删除一项,使用-e去编辑
每个用户都有自己的/var/spool/cron/用户名文件,用于存储定时任务(除非该用户在deny文件中),我们只需要使用crontab -e编辑内容即可,该文件的格式如:
0 12 * * * mail -s "title" < /home/lxc/.bashrc
#分 时 日 月 周 ===========命令串=========
特殊字符:
*表示任何时候都接受, (逗号)代表分隔时段,如3:00和6:00都执行使用 0 3,6 * * * command-代表一段时间范围内,如8点到12点的20分都执行使用20 8-12 * * * command/数字每隔一段时间执行,如没5分钟执行一次使用 */5 * * * * command系统级别的任务,如关机什么的,都需要配置主配置文件/etc/crontab,格式和上面的相同,仅能通过root定义。
anacron:定期去执行任务,即如果系统关机了导致一些定期任务未执行,crontab不会执行了,而anacron会在开机时自动检测并执行补上。
-f:强制执行相关工作,忽略时间戳。-u:更新 /var/spool/anacron/cron.{daily,weekly,monthly} 文件中的时间戳为当前日期,但不执行任何工作。-s:依据 /etc/anacrontab 文件中设定的延迟时间顺序执行工作,在前一个工作未完成前,不会开始下一个工作。-n:立即执行 /etc/anacrontab 中所有的工作,忽略所有的延迟时间。-q:禁止将信息输出到标准错误,常和 -d 选项合用
2.系统进程管理 2.1任务管理
当我们登录系统获取到bash shell之后执行的名令就是任务,每个任务其实就是目前bash进程的子进程。
&:将任务放在后台执行,而不是默认的前台执行,如find / -name man >/dev/record &
在后台的任务不怕ctrl+c中断执行ctrl+z:将当前任务丢到后台中暂停。jobs:查看后台任务状态
-l:同时列出该任务的PID号-r:只列出正在后台运行的任务 run-s:只列出正在后台暂停的任务 stop
[root@com ~]# jobs[1] 已停止 mail[2]- 已停止 vim initial-setup-ks.cfg[3]+ 已停止 find / -name aaa > /etc/null
第一栏表示任务的任务号,其中括号外面的+表示最近第一个被丢到后台的任务(也是默认任务),-表示最近第二个被丢到后台的任务;第二栏表示任务的状态,第三栏表示该任务所执行的命令
fg [%任务号]:将任务拿到前台处理,如果不加%任务号,默认将+号的任务放到前台处理,fg -是倒数第二个任务bg:让后台暂停的任务在后台运行,stopping状态->running状态,和&运行的任务一样kill -signal %任务号:管理后台当中的任务,给予该任务一个信号量。
kill -l:查看目前kill能使用的信号(signal)有哪些signal :可以写信号的数字和英文,使用man 7 signal查看各种信号的作用
1:重新读取一次参数的配置文件,类似reload2:和ctrl+c同样的功能,中断程序的运行9:立刻强制删除一个任务,比较暴力15:以正常的进程方式终止一项任务,并删除该任务19:相当于ctrl+z暂停一个进程的运行
kill后面默认接pid号码,如果是任务号不要忘记加%了
2.2脱机管理问题
前面所说的后台是bash的后台,而不是系统后台,如果我们以远程方式连接到系统上,且使用&提交了一个任务到后台,当我们脱机后该任务就不会在执行了。如果想让该任务任然执行可以使用at命令提交任务或者是nohup命令。
nohup [命令与参数] [&]:把任务提交到系统任务中,当前用户注销后任然继续执行。
执行的结果会重定向到~/nohup.out文件里。
2.3进程管理
ps:将当前时间点的进程运行情况摘取下来,静态的
-A:显示所有的进程-a:不显示与终端有关的所有进程-u:显示有效使用者有关的所有进程x:列出比较完整的信息,通常和a一起使用l:较长、较详细的将该pid的信息列出j:任务的格式-f:做一个较为完整的输出
一般用【ps -l】只查看自己bash的进程、【ps aux】查看所有系统运行的进程。
ps -l显示本bash的进程的详细信息如下:
[root@com ~]# ps -lF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD4 S 0 12678 12669 0 80 0 - 29299 do_wai pts/0 00:00:00 bash4 T 0 27172 12678 0 80 0 - 37991 do_sig pts/0 00:00:00 mail4 T 0 27331 12678 0 80 0 - 37446 do_sig pts/0 00:00:00 vim0 R 0 30960 12678 0 80 0 - 38331 - pts/0 00:00:00 ps
F:进程标志FLAG,说明进程的权限,4表示权限为root,1表示子进程没有执行S:进程的状态STAT,主要状态有:
R(Running):该进程正在运行,可调度的状态S(Sleep):该进程正在睡眠(sleep)状态,可以被唤醒(signal)D:不可被唤醒的睡眠状态,通常这个进程是在等待IO的情况,kill -9杀不死T(Stop):停止状态,可能在后台暂停Z(Zombie):僵尸状态,该进程已经终止但却无法在内存中完全删除,空壳子UID:该进程的调用者用户idPID:进程的id号PPID:进程的父进程PID号码,如上bash进程是其他进程的父进程C:代表cpu使用率,单位百分比PRI:进程的优先级,数值越小该进程越快被cpu执行NI:nice值,也是优先级值,只不过PRI由系统决定不能更改,而NI可以由用户更改,最终的进程优先级=PRI+NI,ADDR/SZ/WCHAN:ADDR表示kernel function,指出该进程在内存的哪个部分;SZ表示进程用掉多少内存;WCHAN表示目前进程是否运行,-表示是TTY:登陆者的终端位置,若为远程登录则为pts/n,若为?表示和终端无关,一般为内核的态进程TIME:进程实际使用的cpu时间CMD:触发此进程的命令,如果进程为僵尸状态,命令后面多了个 ps aux显示的不详细信息如下: [root@com ~]# ps auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.7 193936 7128 ? Ss 2月04 0:13 /usr/lib/systemd/systemd --switched-root --system --deserialize 22root 2 0.0 0.0 0 0 ? S 2月04 0:00 [kthreadd]lxc 30765 0.0 0.3 117028 3364 pts/1 S+ 18:01 0:00 bash -lrtkit 760 0.0 0.1 198784 1760 ? SNsl 2月04 0:03 /usr/libexec/rtkit-daemonroot 726 0.0 0.0 84556 816 ? S 其中未讲到的字段有:VSZ:该进程使用的虚拟内存量(KB);RSS:该进程占用的固定内存量;STAT:进程目前的状态;START:进程启动的时间。 其中STAT在基本的RSTDZ状态后面可以加上额外的字符,其中的含义如下: top:动态查看进程的变化 -d:进程界面更新的秒数,默认5秒一更新-p:指定某个pid进行查看、检测对应的进程 top过程中可以指定的按键或操作: ?:显示在top当中可以输入的按键命令排序: P:以CPU的使用率排序显示,默认值M:以Mermory的使用排序显示N:以PID来排序T:由CPU的使用时间排序k:给某个pid一个信号,同kill -signal pidr:给某个pid重新定制nice值,root的修改范围为-20~19,普通用户只能修改0~19q:退出top按键空格:立即刷新u:查看指定用户的进程 top界面如下: [root@com ~]# toptop - 19:40:25 up 20:08, 2 users, load average: 0.00, 0.01, 0.05Tasks: 203 total, 2 running, 197 sleeping, 4 stopped, 0 zombie%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 995704 total, 74204 free, 546000 used, 375500 buff/cacheKiB Swap: 1953788 total, 1953788 free, 0 used、 248824 avail Mem <==如果按k或r会在这提示先输入进程的pid,再需要输入修改的值 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1783 gdm 20 0 3383752 133208 60636 S 0.0 13.4 0:22.98 gnome-shell 885 root 20 0 359108 29796 7224 S 0.0 3.0 0:00.78 firewalld 1622 root 20 0 296084 24340 15692 S 0.0 2.4 0:00.86 X …… pstree:以树状结构显示,父进程和子进程结构分明 -p:同时列出pid-u:同时列出uid 所有进程的父进程都是systemd进程,该进程pid是1. 同样的进程也是使用信号(signal)互相管理,使用kill传递信号:kill -signal PID。注意没有% killall -signal 命令名称:根据【执行命令的名称】(command)来给予信号量,省去了查找pid -i:出现提示字符给使用者,删除前询问-I(大写i):忽略大小写nice [-n 数字] command:执行命令前,可以先指定对应的nice值,值越小优先级越高renice [数字] PID:设置已经启动的进程的nice值 进程的信息可以在/proc/进程号 下找到进程对应的目录和文件 free:查看内存使用情况 -b、-k、-m、g:指定显示单位,默认显示的是k(KB)-h:让系统指定合适的单位-s:动态刷新,类似top,需要指定刷新间隔秒数-c:与-s合用,表示动态刷新几次后自动退出uptime:查看系统启动时间与任务负载,和top的第一行差不多netstat:追踪网络或socket文件 -a:所有信息都打印出来-p:列出网络服务的进程pid-u、-t:显示udp或tcp封包信息-n:不以进程的服务名称,以端口号来显示dmesg:分析内核产生的信息,即开机时内核检测硬件的一些信息,显示在屏幕上一闪而过vmstat:检测系统资源变化。 vmstat [seconds] [次数]:动态刷新,每几秒刷新,一共刷新多少次,次数省略则是无限-f:开机到现在,系统复制(fork)的进程数,即建立的进程数-s:将一些事件导致的内存变化情况列表说明-S:后面接显示单位,K/M替换默认的Bytes-d:列出磁盘的读写总量统计表-p:后面列出分区,可显示该分区的读写总量统计表 vmstat基本说明如下: [root@com ~]# vmstatprocs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 74272 116 376120 0 0 3 1 25 44 0 0 100 0 0 进程字段(procs)分别为: r:表示等待运行中的进程数量b:不可被唤醒的进程数量。这两个项目越多代表系统越忙碌 内存字段(memory)为: swapd:虚拟内存被使用的容量free:未被使用的内存容量buff:缓冲存储器的容量cache:高速缓存的容量。这部分和free命令的相同 内存交换区(swap): si:从磁盘中将进程取出来的容量so:将内存中的进程写入到磁盘你的容量。这两个越大,系统系统越差 磁盘读写(io): bi:由磁盘读入的区块数量bo:写入到磁盘的区块数量 系统(system): in:每秒被中断的进程次数cs:每秒执行的事件切换次数。这两个值越大,代表系统与外接设备沟通的越频繁 CPU(和top命令显示的一样): us:非内核层的CPU使用状态,即用户启动的进程使用CPU的百分比sy:内核层CPU使用状态id:闲置CPU的状态wa:等待io所耗费的CPU状态st:被虚拟机所使用的CPU状态 作用:系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。 配置文件: /usr/lib/systemd/system:每个服务最主要的启动脚本设置;/run/systemd/system:系统执行过程中所产生的服务脚本,比上面目录优先运行;/etc/systemd/system:管理员根据主机系统的需求建立的执行脚本,比上面的优先级高; unit类型: 通过查看扩展名识别,通过命令systemctl -t help可以查看所有的类型 .service:用于定义系统服务,包括服务器本身所需的本地服务以及网络服务等.target:一群unit的集合,用于模拟实现运行级别.socket:用于标志进程间通信用的socket文件.device:用于定义内核识别的设备.mount:用于定义系统挂载点.timer:定时器,循环执行的服务,用于取代crontab命令,更精确.path:用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务 unit配置文件: 如/usr/lib/systemd/system/sshd.service文件 分为三部分: [Unit]:unit本身的说明,行为以及依赖关系等,常用设置参数如下 Description:描述信息,查看系统服务时显示给用户看的信息After:说明此unit在哪个unit启动之后才启动的意思,并不强制,功能和before相反Requires:说明此unit必须在哪个unit启动之后才启动,强制性的,强依赖Wants:弱依赖,这个unit之后最好还要启动什么服务比较好Conflicts:定义unit之间的冲突,如果有冲突的服务在启动,当前unit就不能启动[Service]:不同的unit类型对应不同的便签,如[Socket]……,常用参数如下 EnvironmentFile:环境配置文件,如sshd.service配置文件在/etc/sysconfig/sshdExecStart:实际执行此服务的命令或脚本程序。绝对路径ExecStartPre,ExecStartPost:分别在ExecStart之前和之后运行ExecStop:停止stop unit要运行的命令或脚本程序,一般都是kill命令Restart:当设定为1时,当该服务意外终止时,可以自己重新启动Type:说明这个服务的启动方式 simple:默认值,这个服务由ExecStart启动,启动后常驻于内存forking:fork一个子进程运行该服务,再将父进程删除oneshot:与simple的区别是,不会常驻于内存,运行完就关闭notify:启动完成后发送一个消息dbus:这个daemon必须要在取得一个D-Bus的名称后,才会继续运作idle:通常是开机或者关机运行[Install]:将此unit安装到哪一个target里面去 Alias:别名,可使用sstemctl command Alias.serviceWantedBy:依附于哪一个target unit,大部分服务依附于multi-user.target,命令行默认Also:安装本服务的时候还需要安装别的相关服务 在unit文件中,以#开头的行后面的内容会被认为是注释,相关布尔值,1、yes、on、true都是开启0、no、off、false都是关闭,时间单位默认是秒,所以要用毫秒(ms)分钟(m)等须显式说明 对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启 可以通过systemctl cat unit直接查看该服务的配置文件。 格式为:systemctl [command] [unit] command主要有: start:立即启动unitstop:关闭unitrestart:重启unitreload:不关闭unit,重新加载配置文件,EnvironmentFileenable:设置unit下次开机自启动disable:开机不自动启动status:unit的状态mask:禁止自动和手动启动unmask:取消禁止is-active:目前有没有在运行is-enable:是否开机自启 [root@com ~]# systemctl status sshd● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) Active: active (running) since 六 2022-02-12 12:11:56 CST; 3h 54min ago Docs: man:sshd(8) man:sshd_config(5) Main PID: 1274 (sshd) Tasks: 1 CGroup: /system.slice/sshd.service └─1274 /usr/sbin/sshd -D 如上第二行的enable表示开机自启动,第三行的active表示正在运行,常见状态有: active(running):正有该服务的一个进程或多个进程正在系统中运行active(exited):仅执行一次就正常结束的服务,目前没有任何进程在系统中执行active(waiting):正在运行当中,不过还需要等待其它事件发生才能继续运行inactive:该服务没有运行 除了enable/disable外还有: enable:该服务开机自启动disable:开机不启动static:该服务不可以自己启动,只能被其他服务唤醒mask:该服务无论如何都不能启动,使用systemctl mask unit设置的 查看系统上所以的服务:systemctl [command] [--type=TYPE] [--all] systemctl:列出系统上所有启动的服务,同systemctl list-units,加上--all也列出未启动的systemctl list-unit-files:依据/usr/lib/systemd/system内的文件,列出所有已经安装的服务 通过systemctl管理不同的操作环境:systemctl [command] [unit.target] command有: get-default:取得目前的targetset-default:设置后面的target为默认的操作环境isolate:立即切换到后面的环境 其中target常用的有: multi-user.target:纯命令行模式graphical.target:图形界面,包含了命令行界面rescue.target:紧急救援模式emergency.target:紧急模式shutdown.target:关机模式 为了方便起见,systemd提供了几个简单的命令用于切换模式: systemctl poweroff:关机模式systemctl reboot:重启模式systemctl suspend:进入挂起模式,将数据保存在内存中,关闭大部分的硬件,唤醒的速度快systemctl hibernate:进入休眠模式,系统的状态保存到硬盘中,唤醒速度慢systemctl rescue:进入紧急救援模式systemctl emergency:进入紧急模式 分析各服务之间的依赖性:systemctl list-dependencies [unit] [--revers] 我们可以编写自己的shell脚本,在配置文件那三个目录中的随便一个写入我们自己的配置文件,用来管理我们的脚本,即可实现自定义服务 CentOS7的新特性timer,也是交给systemd服务来管理。 首先需要满足如下条件: 只需要把配置文件中的[Service]改为[Timer],常用选项如下: 1.单调定时器: OnActiveSec:相当于本时间单元被启用的时间点,如当前的mytime.timer启动后20分钟开始执行OnBootSec:相对于服务器被启动的时间点OnStartupSec:表示相对于systemd服务被启动的时间点OnUnitActiveSec:最后一次启动再隔多久再启动一次OnUnitInactiveSec:最后一次启动停止后再隔多久再启动一次 2.日历定时器 OnCalendar:时间单位,和crontab -e文件中类似 时间格式为:星期 年-月-日 时:分:秒 如: Thu,Fri 2022-*-1,5 11:12:13 表示2022年任意月份的1号5号如果为星期四或星期五的话则在11:12:13执行 *-*-* *:*:00 表示每分钟 *-*-* *:*:00 表示每天 *-01,07-01 00:00:00表示每半年 *:0/15 表示每15分钟,/表示每隔,0/15表示从0开始每15分钟隔一次 还可以使用now、daily、tomorrow、hourly、today、weekly、monthly来表示时间 Unit:要执行的单元,通常不用,一般使用my_service.service+my_service.timer的方式Persistent:当使用OnCalendar的设置时,指定该功能要不要持续进行的意思,设置为yes的话就是类似anacron的功能 systemctl list-timers:查看所有的timer单元
2.4查看系统资源
3.系统服务(daemon)
3.1systemd相关知识点
systemd定义它所管理的服务都为一个服务单元unit,unit分为多种不同的类型,如系统服务、数据监听与交换的socket文件服务、提供不同运行级别分类的操作系统环境(target)等。
systemctl daemon-reload
3.2管理服务
3.3timer定时任务