是否可以在计算引擎中看到输出启动脚本

是否可以在计算引擎中看到输出启动脚本

我的 Compute Engine 虚拟机在部署时会运行启动脚本。一切似乎都运行良好,但启动脚本中有一个命令我认为有问题。

我运行命令

apt-get update && apt-get upgrade -y

这应该会安装所有软件包的最新版本(对吗?)

当我手动执行此操作时,它可以工作,但需要花费大量时间。如果我让脚本执行此操作,当我通过 ssh 连接时,我看不到任何输出,所以我不得不假设它仍在运行。有没有办法可以查看它是否仍在工作以及是否已完成?

这是脚本:

#! /bin/bash
file="/var/www/check.txt"

if [ -e $file ]
then
apt-get update && apt-get upgrade -y
git -C /var/www/html pull https://xxxxxx:[email protected]/xxxxxx/xxxxx.git
else
apt-get update
apt-get install apache2 php libapache2-mod-php php-mcrypt php-mysql mysql-client -y
a2dismod autoindex
service apache2 restart

cat <<EOF > /etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
        DirectoryIndex index.php index.cgi index.pl index.html index.xhtml index.htm
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
EOF

rm -rf /var/www/html
git clone https://xxxxxx:[email protected]/xxxxxx/xxxxx.git /var/www/html/

cat <<EOF > /etc/apache2/sites-available/xxxxx.conf
<VirtualHost *:80>
  ServerName  xxxxxx.com
  ServerAlias www.xxxxxx.com
  ServerAdmin [email protected]
  DocumentRoot /var/www/html/wwwroot
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
 </VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
EOF

cat <<EOF > /etc/apache2/sites-available/020-xxxxx_xxxx.conf
<VirtualHost *:80>
  ServerName  xxxx.xxxxx.xxx
  ServerAlias xxxx
  ServerAdmin [email protected]
  DocumentRoot /var/www/html/xxxxx
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
EOF

cat <<EOF > /var/www/html/wwwroot/.htaccess
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
EOF

sed -i 's/AllowOverride None/AllowOverride All/g' /etc/apache2/apache2.conf

wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
chmod +x cloud_sql_proxy
mkdir /cloudsql; sudo chmod 777 /cloudsql
./cloud_sql_proxy -dir=/cloudsql &

#rm /var/www/html/wwwroot/xxxxx/xxxxxx.php


#temporary for testing.
cat <<'EOF' > /var/www/html/wwwroot/includes/xxxxx.xxxx
<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);




$username = "xxxxxx";
$password = "xxxxx";
$host = "/cloudsql/snappy-gantry-xxxxx:europe-west1:db1";
$dbname = "xxxxx";

  setlocale(LC_ALL, 'nld_nld');



$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
try {
    $db = new PDO("mysql:unix_socket={$host};dbname={$dbname};charset=utf8", $username, $password, $options);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $ex) {
    die("Failed to connect to the database: " . $ex->getMessage());
}
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
EOF


a2dissite 000-default
a2ensite 010-xxxxx_main
a2ensite 020-xxxx_help
a2enmod rewrite
service apache2 restart
apt-get update && apt-get upgrade -y
sudo cat <<EOF > /var/www/check.txt
aanwezig!
EOF
fi

答案1

Google Cloud Compute Engine 实例的启动脚本输出将写入以下之一日志文件取决于实例的 Linux 发行版:

  • CentOS 和 RHEL:/var/log/messages
  • Debian:/var/log/daemon.log
  • Ubuntu 14.04、16.04 和 16.10:/var/log/syslog
  • SLES 11 和 12:/var/log/messages

如果出于某种原因您想要存储脚本的更新,您可以考虑将输出重定向到文件并将 ID 上传到 Google Storage。例如:

  ...
$ command >> output
$ command >> output
$ gsutil cp output gs://yourbucketname/output
$ command >> output
  ...
$ command >> output
$ gsutil cp output gs://yourbucketname/output
$ ...

请注意,您可能考虑将带有“ ”的标准错误重定向2>>到文件并将其上传。

编辑:我忘了回答你的一个问题。是的,你可以检查命令是否仍在运行;因为从操作系统的角度来看,这些命令是正常进程,因此你将能够检查它们是否正在运行:

$ ps -aux

例如我得到了这个具有sleep启动脚本的输出

root       691  0.0  0.0   5840   696 ?        S    14:45   0:00 sleep 30

答案2

grep 启动脚本 /var/log/syslog

答案3

对于 RHEL 和 CentOS,你也可以使用 journalctl 命令

$ journalctl

或者如果您想在启动脚本执行时实时跟踪日志,您可以使用 -f 选项:

$ journalctl -f

答案4

从 2022 年起,你可以在 Debian 上使用 journalctl,如下所示

sudo journalctl -u google-startup-scripts.service

https://cloud.google.com/compute/docs/instances/startup-scripts/linux

相关内容