Fork me on GitHub

linux 命令 crontab

crontab 是 linux 上执行定时任务的工具,本文是 Mac OS 上 crontab 的应用

新建 crontab 文件

1
sudo touch /etc/crontab

查看所有 crontab 任务

1
crontab -l

新建 crontab 任务

1
2
3
crontab -e
打开 vi 编辑器,保存退出后自动加到 crontab 列表中执行
显示 crontab: installing new crontab 表示新建成功

crontab 文件格式

1
2
3
4
5
6
第1列分钟0~59
第2列小时0~23(0表示子夜)
第3列日1~31
第4列月1~12
第5列星期0~7(0和7表示星期天)
第6列要运行的命令
1
2
示例:(每分钟输出当前时间到cron.log)
*/1 * * * * /bin/date >> /Users/(你的用户名)/log/cron.log

启动 cron

1
2
3
sudo /usr/sbin/cron start
sudo /usr/sbin/cron restart
sudo /usr/sbin/cron stop

清空 crontab

1
crontab -r

删除指定 cron

1
2
crontab -e
编辑删除即可

新建 crontab 任务报错 crontab: “/usr/bin/vi” exited with status 1 解决

1
2
3
在 ~/.vimrc 中加入以下内容:
" 解决 crontab 编译失败问题
autocmd filetype crontab setlocal nobackup nowritebackup

加锁

1
2
3
4
5
6
7
8
9
crontab 定时执行任务,如果判断上一次任务未执行完,本次不执行
用 flock 命令加锁
编辑任务:
* * * * * flock -xn /tmp/mytest.lock -c 'php /home/xxx/php/test.php >> /home/xxx/php/test.log'
原理:
任务开始时,判断 /tmp/mytest.lock 文件是否被锁定
if 被锁定,判断为加锁中,跳过
if 未被锁定,锁定 /tmp/mytest.lock,并执行任务,任务完成后解锁 /tmp/mytest.lock
注:没找到 MacOS 上使用 flock 命令的方法

参见linux使用flock文件锁解决crontab冲突问题


1
2
3
4
5
6
7
8
9
todo
MacOS 安装 flock
https://github.com/discoteq/flock
flock /tmp/cron_date.lock /usr/bin/php /Users/xxx/codes/php_space/cron.php >> /Users/xxx/log/cron.log
可以执行
但放在 crontab 里没有执行
* * * * * flock -xn /tmp/cron_date.lock /usr/bin/php /Users/xxx/codes/php_space/cron.php >> /Users/xxx/log/cron.log
MacOS 可以尝试 launchctl
https://my.oschina.net/shede333/blog/470377
-------------感谢您的阅读 有问题请留言(或mailto:frostbelt@sina.cn)-------------