定时任务
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
控制系统服务