cron 与windows
的计划任务相同。它是在 POSIX OS
以用户身份配置和执行计划任务的实用程序。
许多公司在其内部管理服务器上使用 cron
作业来执行定期维护或备份,通常以 root
用户,如果管理不善,可以通过滥用配置文件来控制组织。
cron
任务由系统上运行的服务编排。
命令的语法是 service <service-or-unit-name> start|status|stop|restart
。因为在这种情况下,需要检查 cron
单元的状态,所以命令是,
service cron status
当前用户的 cron
任务配置由称为 crontab
的命令管理。使用此命令,可以创建/删除/更新在普通文本文件配置的每一行中指定的 cron
任务。
要列出当前用户的 cron
任务 ,请运行 crontab -l
。
# Edit this file to introduce tasks to be run by cron.
#
# Output of the crontab jobs (including erros) is sent through
# email to the user the crontab file belongs to (unless redirected)
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
MAILTO="[email protected]"
10 14 1 * * /usr/local/maintain.script
10 0 * * * /bin/backup.local >/dev/null 2>&1
10 4 * * sat /scripts/check-patches
10 0-23/2 * * * /bin/backup
0 20 * * 1-5 /scripts/update
可以看到有5个任务。要了解它们含义,先看一下crontab
文件格式。
配置文件中的 #
用于在文件中的任何位置放置注释行。cron
服务将简单地忽略这一行并移动到下一行。
可以像在 shell
脚本中一样定义变量 VAR_NAME=VALUE
。在本例中,它是 MAILTO=“[email protected]”
以 *
或某个数字开头的每一行都被视为 cron
任务,cron
服务会执行它。最后一个注释行中看到的格式是定义 cron
配置的方式。它的最后一块是必须执行的命令,可以执行 bash
命令或环境变量中的任何文件或可执行文件的确切路径。
那么,就可以知道上面5个任务分别是什么:
/usr/local/maintain.script
/bin/backup.local >/dev/null 2>&1
/scripts/check-patches
/bin/backup
/scripts/update
crontab
文件有一个特殊的变量 MAILTO
,用于通过电子邮件发送 cron
作业的报告或日志。可以在 crontab
文件的第一行中定义它。
如果命令没有在标准输出或标准错误上产生任何输出,则不会通过邮件发送。实际上,这是crontab中的一项功能,用于禁用crontab
上特定命令的电子邮件发送, 上面第二个任务就是实现这样的功能。
cron
任务而被入侵永远不要使用 sudo
或 root
用户执行命令,并避免在工作中使用 SUID
二进制文件。一名合格的 bash 开发人员在创建 bash
脚本时在应该执行命令之前添加一些预检查,并防止它们被破坏,特别是这些脚本是加入到cron
任务中。
请点一下右下角的“在看”,谢谢!!
暗号:9b021