有时候会遇到这种情况,需要定期执行一下某个脚本文件,此时可以考虑定时任务。
linux/mac下的定时执行主要是使用crontab文件中加入定制计划来执行,Cron本身是一个守护进程,在后台运行,通过配置文件“crontab”来根据时间调度指定的作业执行。
mac
有两种定时任务,我使用的是第一种:
基本上所有的Linux发行版在默认情况下都预安装了cron工具。即使未预装cron,也很简单,执行命令手动安装它:
$ sudo apt-get install cron
$ service cron start
$ service cron status
cron start/running, process 1027
查看 crontab 是否启动
sudo launchctl list | grep cron
检查需要的文件
LaunchAgents ll /etc/crontab
ls: /etc/crontab: No such file or directory #表示没有这个文件,需要创建一个
创建文件
sudo touch /etc/crontab
通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。
crontab命令后可以加参数:
$ crontab –l #列出当前用户的任务列表
$ crontab –l –u username #列出指定用户的任务列表
$ crontab -e #编辑任务列表
$ crontab -ri #提示性删除当前用户的任务列表
* * * * * command to be executed
- - - - - -
| | | | | |
| | | | | --- 预执行的命令
| | | | ----- 表示星期0~7(其中星期天可以用0或7表示)
| | | ------- 表示月份1~12
| | --------- 表示日期1~31
| ----------- 表示小时1~23(0表示0点)
------------- 表示分钟1~59 每分钟用*或者 */1表示
#==========以下是例子============
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
每晚的21:30重启apache
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
每月1、10、22日的4:45重启apache
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
每周六、周日的1:10重启apache
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
每天18:00至23:00之间每隔30分钟重启apache
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
每星期六的23:00重启apache
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache
0 17 * * 1-5 mail -s "hi" [email protected] < /tmp/maildata
周一到周五每天17:00寄一封信给[email protected]
当使用 crontab -e 命令后。即可进入编辑界面,可以输入“ * * * * * myCommand # 分+ 时+ 日+ 月+ 星期+ 要运行的命令 ”。我这里运行了:
*/1 * * * * cd 绝对路径/order_promotion_alarm/ && /usr/local/Cellar/go/1.11.5/libexec/bin/go run 绝对路径/order_promotion_alarm/sync_alarm.go
上一句表示先切到项目某个文件目录下,然后每隔一分钟,运行一下sync_alarm.go这个文件。由于一开始上面命令一直不执行成功,所以就切到记录运行信息的文件里看了一下,执行命令 cat /private/var/mail/用户名 ,会显示运行信息。类似下面这种:
From 用户名@bogon.localdomain Thu Mar 14 14:20:02 2019
Return-Path: <用户名@bogon.localdomain>
X-Original-To: 用户名
Delivered-To: 用户名@bogon.localdomain
Received: by bogon.localdomain (Postfix, from userid 501)
id DE490353130; Thu, 14 Mar 2019 14:20:02 +0800 (CST)
From: 用户名@bogon.localdomain (Cron Daemon)
To: 用户名@bogon.localdomain
Subject: Cron <用户名@bogon> cd 绝对路径/order_promotion_alarm/ && /usr/local/Cellar/go/1.11.5/libexec/bin/go run 绝对路径/order_promotion_alarm/sync_alarm.go
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
Message-Id: <[email protected]>
Date: Thu, 14 Mar 2019 14:20:02 +0800 (CST)
Info 2019-03-14 14:20:02,143 v1(6) stress_testing.go:51。。。。。。等等
参考:
http://www.page.keyllo.com/linux/2016/12/12/linux-mac-crontab.html
https://blog.csdn.net/biyongyao/article/details/77791238
https://talk.ninghao.net/t/mac/5447