select-editor
- 选择默认编辑器一些需要进行编辑的命令,首次执行前,会问选择什么编辑器:
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed
Choose 1-4 [1]:
at
-仅执行一次的计划任务适用于临时的、一次性的计划任务。
需要 atd
服务开启。
要执行的任务脚本会被放在 /var/spool/cron/atjobs/
(Ubuntu)或 /var/spool/at/
(CentOS)中。
各用户使用该命令的权限:
/etc/at.allow
,则只有该文件内的用户可以执行/etc/at.allow
,但有 /etc/at.deny
,则只有该文件内的用户不可执行默认会有一个空的 /etc/at.deny
文件。
at -l # 或 atq # 列出系统上所有用户的 at 计划
at -d 任务号码 # 或 atrm 任务号码 # 取消对应的 at 计划
at -c 任务号码 # 查看对应的 at 任务详情
# 下面是关于时间的写法
at HH:MM # 在 HH:MM 执行(如果今天已经过了这个点,就放到明天)
at HH:MM YYYY-MM-DD # 在 YYYY-MM-DD HH:MM 执行
at HH:MM[am|pm] [月份的英文] [DD] # 在 月份-DD HH:MM [am|pm] 执行
at 04pm July 30 # 在 07-30 16:00 执行
at HH:MM[am|pm] + 数字 [minutes|hours|days|weeks] # 在某个时间点后再加一段时间执行
at now + 5 minutes # 在 5 分钟之后执行(以执行该命令的时间为准)
ding@ding-server:~$ at now + 5 minutes # now 以在这里按回车键的时间为准
warning: commands will be executed using /bin/sh
# 默认是用 sh 执行的(在 Ubuntu 上就是 dash,故如果要用 bash 执行,则最好先写好脚本再用 bash 执行)
at> /bin/echo 'hello from atd' > /home/foxconn/hello_atd.txt # 开始输入脚本,为避免可能的问题,最好使用绝对路径
at> /bin/echo 'hello world' > /home/foxconn/hello_world.txt
at> <EOT> # 按 Ctrl + D 结束输入,会显示这个
job 4 at Tue Jun 7 10:07:00 2022 # 会提示你什么时候执行
ding@ding-server:~$ atq
4 Tue Jun 7 10:07:00 2022 a foxconn
ding@ding-server:~$ at -c 4
#!/bin/sh
# atrun uid=1000 gid=1000
# mail foxconn 0
umask 2
# 设置环境变量略
cd /home/foxconn || {
echo 'Execution directory inaccessible' >&2
exit 1
}
/bin/echo 'hello from atd' > /home/foxconn/hello_atd.txt
/bin/echo 'hello world' > /home/foxconn/hello_world.txt
ding@ding-server:~$ atrm 4
ding@ding-server:~$ # 任务已删除
# 若任务未删除,时间到的时候,可以看到那两个文件
batch
- 闲时执行任务和 at
很像,但不定义时间。
在 CPU 1 分钟负载小于给定值时,才会执行(Ubuntu 默认为 1.5
,CentOS 默认为 0.8
)。
定义后能够通过 at
、atd
、atrm
管理。
对应服务 crond
。
用户权限控制和 at
很像,把 at
换成 cron
即可;但如果两个文件都不存在,则所有用户都可以使用。
CentOS 中,执行记录会记录到 /var/log/cron
;Ubuntu 默认未开启。
crontab
- 配置 croncrontab [选项]
选项:
-u 用户名
:帮其他用户操作(需 root 权限)-e
:编辑-l
:查看-r
:删除所有crontab -e
编辑):
/var/spool/cron/crontabs/用户名
(Ubuntu)/var/spool/cron/用户名
(CentOS)/etc/crontab
/etc/cron.d/*
分 时 日 月 周几 命令
| | | | | |
| | | | | 最好用绝对路径
| | | | 0-7 或周英文前三位,周日可以是 0 或 7
| | | 1-12 或月份英文前三位
| | 1-31
| 0-59
0-59
填数字(分、时、日、月、周几)时,可用特殊符号:
*
:任意a,b
:a
和 b
a-b
:从 a
到 b
a/b
:a
区间(可以是 c-d
,也可以是 *
)中,每隔 b
1-12/2
或 */2
等价于 1,3,5,7,9,11
如果“日”和“周几”都定义有值,则其中只要一个条件满足,则条件满足。
例:
每周五 19:00 重启一次:
0 19 * * 5 /usr/sbin/reboot
奇数月的中旬 12:00~14:00,每 5 分钟请求给定 URL:
# 要写两个
*/5 12-13 11-20 */2 * /usr/bin/curl URL
0 14 11-20 */2 * /usr/bin/curl URL
上方有定义变量的命令:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root # 有额外输出时,发送邮件给谁
下方的格式:
分 时 日 月 周几 用户名 命令
# 注意这里有用户名
/etc/cron.hourly/*
、/etc/cron.daily/*
、/etc/cron.weekly/*
、/etc/cron.monthly/*
:依给定频率执行其中的脚本,脚本格式与普通脚本一样。
这些实际上由 anacron 管理,确保即使遇到停机,也会在恢复后执行命令。
Ubuntu 中被写进了 /etc/crontab
;CentOS 中配置文件 /etc/anacrontab
。