gpt4 book ai didi

php - 如何查看 Linux 服务器中所有命令的控制台历史记录?

转载 作者:太空宇宙 更新时间:2023-11-04 05:27:40 26 4
gpt4 key购买 nike

我正在寻找一种方法来查看服务器中回显的历史记录。我正在使用 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;

这也应该回显一些文本,但什么也没有显示。

最佳答案

设置 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() 的问题:How to pass parameters from command line to $_POST in php-script?

worker

现在监听器已将命令传递给工作程序 (auto-deployment-is-a-go.php) 来完成其工作,您不必担心日志记录,因为监听器中的 exec() 命令会将输出写入日志文件。

您必须将 $payload 值更改为 use 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

关于php - 如何查看 Linux 服务器中所有命令的控制台历史记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28813011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com