mac 中 crontab 的使用
1.crontab介绍
crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。MacOS和linux都是unix的变种系统,所有linux上可执行的指令大多数Mac上也可以执行。
- crontab服务的重启关闭,开启Mac系统下
sudo /usr/sbin/cron start
sudo /usr/sbin/cron restart
sudo /usr/sbin/cron stop
- crontab文件的语法格式
写一条crontab的文件内容,该条任务的功能是每隔一分钟都在/Users/username/Desktop/demo目录下创建一个以当前的年月日时分秒为名字的空白文件
*/1 * * * * touch /Users/username/Desktop/demo/$(date +\%Y\%m\%d\%H\%M\%S)
第1列:分钟0~59 ( */1 表示每隔一分钟)
第2列:小时1~23(0表示子夜)
第3列:日1~31
第4列:月1~12
第5列:星期0~7(0和7表示星期天)
第6列:要运行的命令
- 命令格式
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
- 参数介绍
-u user:用来设定某个用户的crontab服务,例如,“-u gtq”表示设定gtq用户的crontab服务,此参数一般有root用户来运行。
file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。
2. crontab在mac 上的使用
- 查看 crontab 是否启动,Mac的定时任务都由 launchctl 来管理.
Username@UsernameideMacBook-Air ~ % sudo launchctl list | grep cron
Password:
- 0 com.vix.cron
没有就看下启动项的配置
Username@UsernameideMacBook-Air ~ % locate com.vix.cron
WARNING: The locate database (/var/db/locate.database) does not exist.
To create the database, run the following command:
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
Please be aware that the database can take some time to generate; once
the database has been created, this message will no longer appear.
报错,database 不存在,按照提示步骤创建一个
Username@UsernameideMacBook-Air ~ % sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
哦豁,发现没效果,再来,进行库更新一下
Username@UsernameideMacBook-Air ~ % sudo /usr/libexec/locate.updatedb
在执行下,发现有效果了
Username@UsernameideMacBook-Air ~ % locate com.vix.cron
/System/Library/LaunchDaemons/com.vix.cron.plist
查看配置项
Username@UsernameideMacBook-Air ~% vim/System/Library/LaunchDaemons/com.vix.cron.plist
配置项的内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.vix.cron</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/cron</string>
</array>
<key>KeepAlive</key>
<dict>
<key>PathState</key>
<dict>
<key>/etc/crontab</key>
<true/>
</dict>
</dict>
<key>QueueDirectories</key>
<array>
<string>/usr/lib/cron/tabs</string>
</array>
<key>EnableTransactions</key>
<true/>
</dict>
</plist>
注意,其中有个KeepAlive的条件是 /etc/crontab 是否存在:
<key>KeepAlive</key>
<dict>
<key>PathState</key>
<dict>
<key>/etc/crontab</key>
<true/>
</dict>
</dict>
所以查看是否存在,如果不存在,我们需要创建一个,不然任务是无法正常运行的。
Username@UsernameideMacBook-Air ~ % sudo touch /etc/crontab
到此,就完美了,接下来我们开始创建任务了。
3 创建定时任务
我们通过下面一个命令来添加一个计划任务
Username@UsernameideMacBook-Air ~ % crontab -e
我们会进入一个页面,上面就可以添加我们的计划任务了,每一行代表一条。
*/1 * * * * touch /Users/Username/Desktop/1111/$(date +\%Y\%m\%d\%H\%M\%S)
*/1 * * * * touch /Users/Username/Desktop/demo/$(date +\%Y\%m\%d\%H\%M\%S)
~
~
~
"/tmp/crontab.7nvdHHaOrd" 1L, 74C
我刚写了第二条命令,写完后保存,会出现
Username@UsernameideMacBook-Air ~ % crontab -e
crontab: installing new crontab
告诉你又新增了一个任务。该任务是每隔一分钟在/Users/Username/Desktop/demo目录里创建一个以当前的年月日时分秒为名字的空白文件。
我们可以用该命令查看我们的所有任务
Username@UsernameideMacBook-Air ~ % crontab -l
*/1 * * * * touch /Users/lijiwei/Desktop/1111/$(date +\%Y\%m\%d\%H\%M\%S)
*/1 * * * * touch /Users/lijiwei/Desktop/demo/$(date +\%Y\%m\%d\%H\%M\%S)
然后我们去该目录下看看。
Username@UsernameideMacBook-Air ~ % cd /Users/lijiwei/Desktop/demo
Username@UsernameideMacBook-Air demo % ls
20200716232400
lijiwei@lijiweideMacBook-Air demo %
果然有以时间戳为名字的空白文件.这就大功告成了。
顺便说一下,删除任务的命令是
crontab -r
完美!