$output = shell_exec('echo "php '.$realFile.'" | at '.$targTime.' '.$targDate.' 2>&1');
print $output;
有人可以帮我弄清楚为什么以上这条线没有按照它应该做的去做?我们的想法是创建一个执行php脚本的“at”作业。如果我切换到用户apache(理想情况下,当php文件完成时将控制at函数)我可以运行
echo "php $realFile.php" | at 00:00 05/30/17
它会完全符合我的要求。问题出在我的php文件的上述代码片段中,它不会正确创建at作业。当我在他们两个上做at -c job#
时,我的文件所做的工作大约是缺少用户信息和所有内容的第3个长度。它基本上从PATH =开始并且下降。不包括HOSTNAME =,SHELL =,SSH_CLIENT =,SSH_TTY =,USER =。我认为它需要大部分此信息才能正确运行。最终输出(下图)始终相同,但由于某种原因它没有任何顶部部分。如果您需要更多信息,请告诉我。我不想在这里粘贴所有代码,因为它包含特定于作业的信息。
${SHELL:-/bin/sh} << 'marcinDELIMITER0e4bb3e8'
php "$realFile".php
marcinDELIMITER0e4bb3e8
它似乎不是一个权限问题,因为我可以su到apache并运行所需的确切命令。文件所在的文件夹也归apache所有。我也给了我尝试通过chmod运行777或755权限的每个文件,所以我不认为这是问题。
答案 0 :(得分:1)
我一时间想出了一个小轿车。我现在使用的方式是ssh2以root身份连接到我自己的服务器并以此方式创建它。不妥协,因为您每次都必须手动输入密码。真的很糟糕的工作。主要问题是apache没有正确的权限来完成AT工作所需的一切,所以有人认为这样做会很棒。我在随机网页上找到的另一个选项是通过php脚本使用sudo,但基本上相同的减去必须重新连接到你自己的服务器。任何其他选择将不胜感激。
答案 1 :(得分:0)
阅读手册和日志将是一个很好的起点。特别是:
调用时SHELL环境变量的值将决定用于执行at job命令的shell。如果在调用at时未设置SHELL,则将使用用户的登录shell;否则,如果在调用at时设置了SHELL,则它必须包含将在指定时间运行命令的shell解释器可执行文件的路径。
要检查的其他事项是用户包含在at.allow中,SELinux已禁用且Web服务器未运行chrrot。