我正在寻找一种方法来查看服务器中回显内容的历史记录。我正在使用 GitHub 网络钩子,当发生自动部署时,会执行带有 echo 的脚本。例如,这是代码:
<?php
try
{
$payload = json_decode($_REQUEST['payload']);
echo 'payload is received; ';
}
catch(Exception $e)
{
echo 'no payload; ';
exit(0);
}
if ($payload->ref === 'refs/heads/development')
{ echo 'received updated in dev branch; bash/deploy_frontend2dev.sh ';
exec('sh /var/www/html/bash/deploy_frontend2dev.sh', $output);
var_dump($output);
}
else
echo 'smth is called';
我知道您可以使用$ history
查看命令的历史记录,但是当我这样做时,它不会显示已回显的文本,仅显示已运行的命令。有没有办法看到它?此外,如果您注意到代码中有一个var_dump
也会打印到屏幕上。
顺便说一下,PHP 脚本中发生的可执行文件是这样做的:
cd /var/www/html/ezmob-frontend/;
git pull origin development;
echo "pulling file from dev branch";
rm -R ../dashboard;
echo "dashboard is updated";
unzip ezmob-frontend-built.zip -d ../;
chmod 777 -R dashboard;
这也应该呼应一些文本,但没有任何显示。
设置 GitHub webhook。
正如您在问题中解释的那样,您已经对此有过经验,但是......
设置另一个脚本(侦听器(来侦听 GitHub,以将更新推送到脚本上。然后,此侦听器将通过exec()
调用您的其他脚本,该脚本会将所有输出写入文本文件。
使 GitHub webhook 指向脚本listener.php
。
在 listener.php
中添加以下内容:
<?php
//Run the file to run the auto-deployment and write all output to your log file.
$logfile = '/var/log/github-deployment/log_'. date('d-m-y_G:i:s') .'.log';
exec('php auto-deployment-is-a-go.php '''. http_build_query(json_decode($_POST['payload'], true)) .''' > '. $logfile);
(确保您已创建且可写/var/log/github-deployment/
目录 - 或更改创建日志文件的路径(。
请参阅有关exec()
的问题:如何在php脚本中将参数从命令行传递到$_POST?
工人
现在侦听器已经将命令传递给工作线程(auto-deployment-is-a-go.php
(来完成它的工作,你不能担心日志记录,因为侦听器中的exec()
命令会将输出写入日志文件。
例如,您必须更改$payload
值才能成为 使用parse_str
,例如;
<?php
$payload = null;
parse_str($argv[1], $payload);
try {
if( $payload == null ) {
throw new Exception("no payload detected");
}
} catch(Exception $e) {
die($e->getMessage());
}
// ...
完成后通知您
通常,您不想推动生活然后争先恐后地浏览日志。因此,请让系统通过电子邮件向您发送输出。所以在你的listener.php
脚本中,你会有(在你调用exec()
之后
exec("echo 'Pushed to live. Log files attached' > /tmp/pushtolive.txt");
exec("/bin/mail -s '"Pushed to live!'" -a '. $logfile .' '"email@company.com'" < /tmp/pushtolive.txt");
请参阅以下答案,了解从命令行发送电子邮件:https://serverfault.com/a/194388/207143