定时任务 atq
列出用户等待执行的作业
atrm
删除用户等待执行的作业
watch
定期执行程序
at
设置在某个时间执行任务
1 2 3 4 5 6 7 at now+2minutes/ now+5hours # 从现在开始计时 at 5:30pm/ 17:30 [today] # 当前时间 at 17:30 7.11.2018/ 17:30 11/7/2018/ 17:30 Nov 7 # 指定日期时间 # 输入命令之后,`<c-d>`退出编辑,任务保存
crontab
针对用户维护的/var/spool/cron/crontabs/user_name
文件,其中
保存了cron调度的内容(根据用户名标识)
任务计划格式见文件部分
任务、作业 Crontab文件 /var/spool/cron/crontabs/user_name
使用用户名标识的每个用户的定时任务计划文件,文件中每行为一个
cron调度内容(也可以使用crontab -e
直接编辑)
共6个字段,前5个字段为执行调度时间分配
分钟、小时(24)、日期(31)、月份(12)、星期
*
表示每个当前时间
-
时间区间
,
时间分隔
[range]/[n]
:范围内每隔多久执行一次,范围为*
可省
最后字段为调度内容
例
1 2 3 4 3,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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 [Unit] # 包含对服务的说明 Description= # 服务简单描述 Documentation= # 服务文档 Requires= # 依赖unit,未启动则当前unit启动失败 Wants= # 配合unit,不影响当前unit启动 BindsTo= # 类似`Requires`,若其退出则当前unit # 退出 Before= # 若该字段指定unit要启动,则必须在 # 当前unit之后启动 After= # 若该字段指定unit要启动,则必须在 # 当前unit之前启动 Conflicts= # 冲突unit Condition= # 条件,否则无法启动 Assert= # 必须条件,否则启动失败 [Service] # 服务具体运行参数设置,仅 # *service unit*有该字段 Type= # 服务启动类型 PIDFile= # 存放PID文件路径 RemainAfterExit= # 进程退出后是否认为服务仍处于激活 ExecStartPre= # 服务启动前执行的命令 ExecStartPost= # 服务启动后执行的命令 ExecStart= # 服务具体执行、重启、停止命令 ExecReload= ExecStop= Restart= # 重启当前服务的情况 RestartSec= # 自动重启当前服务间隔秒数 TimeoutSec= # 停止当前服务之前等待秒数 PrivateTmp= # 是否给服务分配临时空间 KillSignal=SIGTERM KillMode=mixed Environmen= # 指定环境变量 [Install] WantedBy= # unit所属的target,`enable`至相应 # target RequiredBy= # unit被需求的target Alias= # unit启动别名 Also= # `enable`当前unit时,同时被`enable` # 的unit
.target
<some_name>.target
:可以理解为系统的“状态点”
target通常包含多个unit
启动target即意味将系统置于某个状态点
target可以和传统init启动模式中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
进程ID为1,掌管所有进程
unit 配置文件参见linux/shell/config_files
systemctl
systemctl
通过d-bus
和systemd交流,在docker和wsl中可能
没有systemd-daemon,此命令可能不能使用,使用service
代替
查看服务、系统状态
状态点/启动级别
get-default
:查看默认target
set-default <target>
:设置默认target
isolate <target>
:切换target,其他target的unit将
被停止
设置服务、系统
配置文件
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
:0
alert
:1
crit
:2
err
:3
warning
:4
notice
:5
info
:6
debug
:7
--nopager
:非分页输出
-o
:日志输出格式
--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.utf8
set-keymap en_GB
timedatectl
timedatectl
:查看当前时区设置
list-timezones
:显示所有可用时区
set-timezone America/New_York
set-time YYYY-MM-DD
set-time HH:MM:SS
loginctl
loginctl
:查看当前登陆用户
list-sessions
:列出当前session
list-users
:列出当前登陆用户
show-user <user>
:显示用户信息
service
控制系统服务