Write the Code. Change the World.

7月 20

既然是再来一次定时任务,那我们就要有明确的目标以及观察点。来列列。

列列观察点

  1. 如何开启定时任务,开启多大频率或定时的任务,几种方式开启。

  2. 定时任务日志功能。(这样才能更好的找到问题的所在)

  3. 定时任务的执行用户。比如 root 用户,非 root 用户。这之间有什么影响和不一样。

  4. 额外, no login 用户的 shell 执行。

开启定时任务

方法 1:

# 编辑,并添加定时任务
vim /etc/crontab 

方法 2:

# 给当前用户添加定时任务。如果是 root 用户登录的,就是给 root 用户添加定时任务(就是执行用户是 root)
crontab -e 

# 给 nginx 用户添加定时任务(编写命令即可)
crontab -e -u nginx

给 root 用户添加定时任务的缺点是 root 用户产生的文件,其他用户默认是没权限去操作的。比如写了日志,其他用户想继续打开该日志来编写,是没办法操作的。除非改权限设置等操作。

方法 3:

vim cron.txt

# 将定时任务命令写在 cron.txt 里边,然后再执行
crontab cron.txt -u nginx

方法 4:

以上的方法,只是命令在其他 sh 文件里。

查看,重启,关闭

查看关闭:

# 查看当前用户执行的定时任务
crontab -l

# 查看 nginx 用户执行的定时任务
crontab -l -u nginx

# 删除当前用户执行的定时任务
crontab -r 

# 删除 nginx 用户执行的定时任务

crontab -r -u nginx

重启:

//启动服务 
service crond start 

//关闭服务 
service crond stop 

//重启服务 
service crond restart 

日志

# 这里可以看到日志的
tail -f /var/log/cron

如果日志文件不存在(被删除了或啥的,请使用下面命令从新生起)

# 重启rsyslog服务:
service rsyslog restart 

# 重启 cron
service cron restart

报错

如果使用 nginx 这种 nologin 用户执行定时任务会报错的。如下:

(CRON) ERROR chdir failed (/home/nginx): No such file or directory

这个时候,只需要在 home 目录下,创建个 nginx 文件夹就 ok 了。

参考

https://www.jianshu.com/p/5d6a0d729ef7

7月 17

条条大道通罗马,使用 linux 定时任务的方法也有很多种。都是 crontab,方式各不一样。列出常用,好用的一些命令。

基本

# crontab文件一般位于/etc/下,这里面存放系统运行的的调度程序
more /etc/crontab 

# 每个用户都会生成一个自动生成一个自己的crontab文件,一般位于/var/spool/cron目录下

cd /var/spool/cron
ls

# 查看当前用户或某个用户的定时任务,nginx 为用户
crontab -l nginx

# 编辑当前用户的定时任务
crontab -e

# 编辑某个用户的定时任务
crontab -e -u nginx

# 删除当前用户的定时任务
crontab -r

其实,laravel 使用定时任务不坑。坑的是一些细节问题。比如权限问题。如:root用户创建了定时任务,然后定时任务里边有了写日志的功能。这个时候,日志的用户组都是 root,然后其他用户组(nginx) 就没权限再写入数据了。这个时候,写入就会出错。这个就是坑。如果定时任务的用户是 nginx 就不会出现这个问题了。下边来下流程。

创建某个用户的定时任务

方式一

crontab -e -u nginx 

# 然后在里边编写命令即可

方式二

# 创建命令文本(cron.txt)。再执行命令
# * * * * * nginx /alidata/service/php/bin/php /alidata/www/kwva/test.kwva.cn/artisan schedule:run >> /dev/null 2>&1
crontab cron.txt -u nginx

参考

https://learnku.com/articles/6775/about-laravel-log-permissions

https://www.runoob.com/linux/linux-comm-crontab.html

https://www.jb51.net/article/98640.htm

https://blog.csdn.net/matengbing/article/details/81056524