Shell 任务
定时任务
atq
列出用户等待执行的作业
atrm
删除用户等待执行的作业
watch
定期执行程序
at
设置在某个时间执行任务
1 | at now+2minutes/ now+5hours |
crontab
针对用户维护的/var/spool/cron/crontabs/user_name文件,其中
保存了cron调度的内容(根据用户名标识)
-e:编辑-l:显示-r:删除
任务计划格式见文件部分
任务、作业
Crontab文件
/var/spool/cron/crontabs/user_name
使用用户名标识的每个用户的定时任务计划文件,文件中每行为一个
cron调度内容(也可以使用crontab -e直接编辑)
共6个字段,前5个字段为执行调度时间分配
- 分钟、小时(24)、日期(31)、月份(12)、星期
*表示每个当前时间-时间区间,时间分隔[range]/[n]:范围内每隔多久执行一次,范围为*可省
最后字段为调度内容
例
1
2
3
43,15 8-11 */2 * * command
每隔两天的8-11点第3、15分执行
3,15 8-11 * * 1 command
每个星期一的上午8-11点的第3、15分钟执行
/etc/crontabs
系统级crontab文件,类似于用户crontab文件,只是多一个用户名 字段位于第6个
服务
系统服务
服务
systemctl脚本目录优先级从低到高[/usr]/lib/systemd/system:系统、应用默认存放位置 ,随系统、应用更新会改变/etc/systemd/system:推荐在此自定义配置,避免 被更新覆盖1
2.include /lib/systemd/system/<service_name>.service
# customized changes/run/systemd/system:进程运行时创动态创建服务文件 目录,仅修改程序运行时参数才会修改
自定义系统服务方法
- 创建
<service_name>.service文件,其中写入配置 - 创建
<service_name>.service.d目录,其中新建.conf文件写入配置
- 创建
- 系统服务控制命令
systemctl参见linux/shell/cmd_sysctl
.service
<some_name>.service:服务配置unit文件
1 | [Unit] # 包含对服务的说明 |
Type:服务启动类型simple:默认,执行ExecStart启动主进程- Systemd认为服务立即启动
- 适合服务在前台持续运行
- 服务进程不会fork
- 若服务要启动其他服务,不应应该使用此类型启动,
forking:以fork方式从父进程创建子进程,然后父进程 立刻退出- 父进程退出后Systemd才认为服务启动成功
- 适合常规守护进程(服务在后台运行)
- 启动同时需要指定
PIDFile=,以便systemd能跟踪 服务主进程
oneshot:一次性进程- Systemd等待当前服务退出才继续执行
- 适合只执行一项任务、随后立即退出的服务
- 可能需要同时设置
RemainAfterExit=yes,使得 systemd在服务进程推出后仍然认为服务处于激活状态
notify:同simple- 但服务就绪后向Systemd发送信号
idle:其他任务执行完毕才会开始服务dbus:通过D-Bus启动服务- 指定的
BusName出现在DBus系统总线上时,Systemd 即认为服务就绪
- 指定的
WantedBy:服务安装的用户模式,即希望使用服务的用户multi-user.target:允许多用户使用服务
.target
<some_name>.target:可以理解为系统的“状态点”
target通常包含多个unit
- 即包含需要启动的服务的组
- 方便启动一组unit
启动target即意味将系统置于某个状态点
target可以和传统init启动模式中RunLevel相对应
- 但RunLevel互斥,不能同时启动
|RunLevel|Target| |——-|——-| |0|
runlevel0.target或poweroff.target| |1|runlevel1.target或rescue.target| |2|runlevel2.target或multi-user.target| |3|runlevel3.target或multi-user.target| |4|runlevel4.target或multi-user.target| |5|runlevel5.target或graphical.target| |6|runlevel6.target或reboot.target|enable设置某个服务自启动,就是在服务配置.service中WantedBy、RequiredBy指明的target注册WantedBy向target对应目录中/etc/systemd/system/<target_name>.target.wants添加符号链接RequiredBy向target对应目录中/etc/systemd/system/<target_name>.target.required添加符号链接systemctl disable <unit>就是移除对应symlink
.socket
日志
/etc/systemd/journal.conf
Systemd日志配置文件
Systemd(服务)
Systemd作为新系统管理器,替代service更加强大
- 支持服务并行启动,提高效率
- 具有日志管理、快照备份和恢复、挂载点管理
- 包括一组命令
Systemd可以管理所有系统资源,不同资源统称为Unit
- service unit:系统服务
- target unit:多个unit构成的组
- devie unit:硬件设备
- mount unit:文件系统挂载点
- automount unit:自动挂载点
- path unit:文件、路径
- scope unit:不是由Systemd启动外部进程
- slice unit:进程组
- snapshot unit:Systemd快照,可以切换某个快照
- socket unit:进程间通信socket
- swap unit:swap文件
- timer unit:定时器
unit配置文件状态(无法反映unit是否运行)
enabled:已建立启动链接diabled:未建立启动链接static:配置文件没有[Install]部分,只能作为 其他unit配置文件依赖,不能独立注册masked:被禁止建立启动链接
systemd进程ID为1,掌管所有进程- unit配置文件参见linux/shell/config_files
systemctl
systemctl通过d-bus和systemd交流,在docker和wsl中可能 没有systemd-daemon,此命令可能不能使用,使用service代替
查看服务、系统状态
status <unit>:查看系统、unit(服务)状态-H <host>:查看远程主机unit状态
show <unit>:查看unit底层参数-p <attr>:查看某个具体属性参数
- 三个查询状态的简单方法,方便脚本使用
is-active <serivce>is-failed <serivce>is-enabled <serivce>
reset-failed <unit>:清除错误状态list-units:列出所有已加载unitlist-unit-files:列出所有系统中unit配置文件、状态--type=:指定特定类型文件--status=:指定特定状态文件
list-dependencies <unit>:查看依赖关系-all:展开target类型
状态点/启动级别
get-default:查看默认targetset-default <target>:设置默认targetisolate <target>:切换target,其他target的unit将 被停止
设置服务、系统
start <service>:启动服务stop <service>:关闭服务enable <service>:开机自启动服务- 行为参见linux/shell/config_files
disable <service>:关闭开机自启动服务enable启动后的服务仅仅disable不会立刻停止服务
kill <service>:杀死服务的所有子进程mask <service>:禁用服务- 无法通过
start、restart启动服务 - 可以防止服务被其他服务间接启动
- 无法通过
umask <service>:启用已禁用服务daemon-reload:重新读取所有服务项- 修改、删除、添加服务项后执行该命令
poweroff:关机reboot:重启rescue:进入rescue模式
配置文件
cat <service_name>.service:查看Unit定义文件edit <service_name>.service:编辑Unit定义文件reload <service_name>.service:重新加载Unit定义文件
journalctl
journalctl:统一管理所有日志:内核日志、应用日志
-k:仅内核日志--since:指定日志时间-n:指定查看日志行数-f:最新日志_PID=:进程日志_UID=:用户日志-u:unit日志-p:日志有限集emerg:0alert:1crit:2err:3warning:4notice:5info:6debug:7
--nopager:非分页输出-o:日志输出格式jsonjson-pretty
--disk-usage:日志占用空间--vacuum-size=:指定日志占用最大空间--vacuum-time=:指定日志保持时间
systemd-analyze
systemd-analyze:查看系统启动耗时
blame:查看各项服务启动耗时critical-chain:瀑布状启动过程流
hostnamectl
hostnamectl:查看主机当前信息
set-hostname <hostname>:设置主机名称
localectl
localctl:查看本地化设置
set-locale LANG=en_GB.utf8set-keymap en_GB
timedatectl
timedatectl:查看当前时区设置
list-timezones:显示所有可用时区set-timezone America/New_Yorkset-time YYYY-MM-DDset-time HH:MM:SS
loginctl
loginctl:查看当前登陆用户
list-sessions:列出当前sessionlist-users:列出当前登陆用户show-user <user>:显示用户信息
service
控制系统服务