linux 定时任务

设置定时任务

进入定时任务设置

crontab -e

编辑完成后,esc,输入wq!保存即可(此时即已经生效)

常见问题

  1. 重启crond出现错误

(CRON) DEATH (can't lock /var/run/crond.pid, otherpid may be 97764): 资源暂时不可用

直接kill -9 [pid] 把现有的crond进程干掉,然后 sudo service crond restart
如果还是无法解决,输入命令查看cron日志:

cat /var/log/cron

如果仍然觉得没有反应,也有可能是执行你的命令报错了。将cron的日志重定向一下(注意这里有个坑):

*/1 * * * * echo "hello, world!" >> /root/cron/test/$(date +"\%Y-\%m-\%d").log 2>&1

坑:这里的日志文件夹,必须手动创建出来到/test这一级,后面日志文件会自动创建,如果你没有这一级目录,它不会产生日志文件,感觉就像cron没有反应一样

  1. 定时重启pm2报错

/usr/bin/env: node: 没有那个文件或目录

需要建立一个软链接:

ln -s /usr/local/NODEJS_HOME/bin/node /usr/bin/node

解决方案,来源自:https://cloud.tencent.com/developer/article/1028166

cron表达式有5、6、7位3种

(Linux中的crontab命令中就是5位)、6位、7位之分,不同位数之间以空格分隔

位数与每位的含义

  • 5位:* * * * * 分、时、天、月、周
  • 6位:* * * * * * 秒、分、时、天、月、周
  • 7位:* * * * * * * 秒、分、时、天、月、周、年

在大部分情况下会省略年这一位,成为6位,再省略秒,就成为5位。

注意:Linux中的crontab表达式只有5位。

记录输出

以日期命名日志:

##每天10点执行
00 10 * * * /usr/bin/php -f /home/cron/phpmailer/phone.php >> "/home/cron/phpmailer/log/phone-$(date +"\%Y-\%m-\%d").log" 2>&1
 
##第二种
00 10 * * * /usr/bin/php -f /home/cron/phpmailer/phone.php >> /home/cron/phpmailer/log/phone-$(date +""\%Y-\%m-\%d"").log

2>&1 表示把标准错误输出重定向到与标准输出一致,不管错误的还是正常的日志都写入到文件中

常用定时时间

时间格式
分钟 小时 日期 月份 周 命令

数字范围 0-59 0-23 1-31 1-12 0-7 echo "hello" >> abc.log

特殊字符的含义

*(星号) 代表任何时刻都接受。

,(逗号) 代表分隔时段的意思。

-(减号) 代表一段时间范围内。

/n(斜线) 那个 n 代表数字,每隔 n 单位间隔。

eg1: 每年的五月一日 10:5 执行一次

5 10 1 5 * command(要是执行网址(curl "http://网址"),或者执行其它的直接写路径)

eg2: 每天的三点,六点各执行一次

00 3,6 * * * command

eg3: 每天的8:20, 9:20,10:20,11:20各执行一次

20 8-11 * * * command

eg4: 每五分钟执行一次

*/5 * * * * command
*/1 * * * * command # 每分钟执行一次,等价于: * * * * * command

eg5: 每周一十点执行一次

00 10 * * 1 command

posted @ 2022-12-31 13:52  流失的痕迹  阅读(473)  评论(0编辑  收藏  举报