Dnmp环境添加定时任务

利用Dock环境搭建lnmp,有些业务需用使用到cron定时任务,在添加定时任务的时候,定时任务不执行的坑点分析。

一、代码

# docker-compose.yml 挂载倆个文件用于添加crond定时任务。
volumes:
    - ./conf/php/init/dingshi.sh:/tmp/dingshi.sh
    - ./conf/php/init/init.sh:/docker-entrypoint.d/init.sh
     
# dingshi.sh  文件内容是需要定时执行的脚本
#!/bin/bash
/usr/local/bin/php  /var/www/html/public/index.php /addons/crontab/autotask/index > /dev/null  2>&1 &

# init.sh  是运行容器后先要执行的脚本
# 赋予用户执行文件的权限
chmod +x /tmp/dingshi.sh
echo "* * * * * /tmp/dingshi.sh" >> /var/spool/cron/crontabs/root
# 重启定时任务服务
/etc/init.d/cron restart

二、执行流程

重新容器的定时任务后,发现定时任务并没有执行。

/var/log中没有看到有关定时任务执行的日志文件。

在查询资料的过程中,发现可安装一个系统日志的组件rsyslog用于查看定时任务的执行日志。

apt-get install rsyslog
service rsyslog start
# 查看日志
cat /var/log/syslog

在查询日志后,发现如下报错:

May 19 10:42:03 7c0e07f30856 cron[2124]: (root) INSECURE MODE (mode 0600 expected) (crontabs/root)

root文件权限必须为600。

三、解决方式

#!/bin/bash

chmod +x /tmp/dingshi.sh
echo "* * * * * /tmp/dingshi.sh" >> /var/spool/cron/crontabs/root
# 新增修改文件权限600
chmod 600 /var/spool/cron/crontabs/root
/etc/init.d/cron restart

四、衍生学习

权限字母对应权限值

  • r读取权限=4
  • w写入权限=2
  • x执行权限=1

rwx(读、写、可执行)===4+2+1=7

rw=(读、写)===4+2=6

位置值意义

7 (所有者)7(用户组) 7(公共)

因此,上述所有的解决方式。root文件必须是所有者有读和写的权限,才能保证定时任务的正确执行。

你可能感兴趣的:(Dnmp环境添加定时任务)