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

时间:2015-03-02 15:06:54

标签: php linux server

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

这也应该回应一些文字,但没有显示任何内容。

1 个答案:

答案 0 :(得分:0)

设置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值更改为使用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