Linux配置PHP定时任务

KingFer

由于服务器是运行在docker环境中,直接运行PHP命令会抛以下异常:

php think xxx

Could not open input file: think

即使用了它对应命令行的php文件来执行,也会抛一个诡异的问题:

QQ图片20200507155055.png

进入docker中执行命令,直接进入执行也会报各种错:

微信截图_20200507155225.png

这是因为默认的环境未配置各种动态链的绑定,需要加载绑定的命令

解决问题:

参考小皮面板提供的webshell,点击composer, 它默认进入docker后,还进行了各种动态链的绑定,只需要把这些命令一起拿出来就行了

微信截图_20200507155537.png

进入docker执行命令如下:

docker exec -i centos_env /bin/bash -c "命令脚本"

我们将上方截图中的命令拼接在一起, 再加上我们需要执行的php命令:

docker exec -it centos_env /bin/bash -c "ln -sf /usr/local/phpstudy/soft/composer/composer-1.6/composer.phar /usr/bin/composer && ln -sf /usr/local/phpstudy/soft/php/php-7.2.21/bin/php /usr/bin/php && export LD_LIBRARY_PATH=/usr/local/phpstudy/soft/php/php-7.2.21/sbin/depends && php /项目路径/think 命令"

我们直接在xshell中可以执行,放在服务器的crontab中有没有效果呢?

我们通过监听crontab执行后邮件通知日志查看结果:

tailf /var/mail/root 

QQ图片20200507160343.png

发现还是抛了一个异常: the input device is not a TTY

经过检查发现docker进入容器的命令多了个参数:

docker exec -it

-t 是指会生成一个伪终端,作用是我们用xshell操作时, 能够生成一个伪终端让我们能够直接操作linux命令,所以在上面说过,直接运行是可以的,但是如果是后台定时,需要去掉-t

最终参数如下:

docker exec -i centos_env /bin/bash -c "ln -sf /usr/local/phpstudy/soft/composer/composer-1.6/composer.phar /usr/bin/composer && ln -sf /usr/local/phpstudy/soft/php/php-7.2.21/bin/php /usr/bin/php && export LD_LIBRARY_PATH=/usr/local/phpstudy/soft/php/php-7.2.21/sbin/depends && php /项目路径/think 命令"

完美解决

问题比较着急?请联系QQ:760483
  • ☀东升
  • ☀东升    2020-05-19 17:17:032楼

    大佬有没有遇到过,crontab的定时任务执行命令行, 就会出现报错error while loading shared libraries: libsodium.so.23: cannot open shared object file: No such file or directory,远程链接直接操作命令行就不会任何报错;已经ln和export过。

    +添加回复

  • 回复

    按我上面操作就可以解决

    KingFer  作者 · 2020-05-19 18:22:39
    回复