服务器环境是用docker搭建的,开发后期业务场景需要使用crond执行定时脚本任务。

记录下解决问题的过程

1.首先我想到在宿主机在安装个php,但是有个问题mysql也在容器里面,通信存在问题
2.在宿主机调用容器的php

2 方案参考大佬文章是这么处理的。

touch /usr/bin/php7cli
chmod +x /usr/bin/php7cli
vim /usr/bin/php7cli

写入下面的命令

#!/bin/bash
if [ ! -n "$1" ]; then
	echo "参数不能为空!"
else
	docker run -it --rm -v $PWD:/tmp -w /tmp php:7.1-fpm "$@"
fi

执行命令

php7cli php --version

一切都朝预期的方向发展,但是遇到了个问题,不懂是不是由于pdo扩展是后面安装的,执行命令的时候无法找到pdo驱动,解决问题失败。

后面又找到了一个解决方案,通过下面的命令执行

docker exec -it fpm-mysql bash -c "cd /www/yjbao;php think charge"

正常执行,于是我放到了crontab里面

*/1 * * * * docker exec -it fpm-mysql bash -c "cd /www/yjbao;php think charge"

等了半天没看到结果,在crontab邮件里面看到内容

the input device is not a TTY

重新调整命令,把t去掉

*/1 * * * * docker exec -i fpm-mysql bash -c "cd /www/yjbao;php think charge"

完美解决