我正在寻找一种方法来查看服务器中回显的内容的历史记录。 我正在使用GitHub webhooks,当发生自动部署时,会执行带有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脚本中发生的exec执行:
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;
这也应该回应一些文字,但没有显示任何内容。
答案 0 :(得分:0)
您已经有过这方面的经验,正如您在问题中解释的那样,但是......
设置另一个脚本(监听器)来监听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()
:How to pass parameters from command line to $_POST in php-script?
现在侦听器已将命令传递给worker(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