我正在使用 Digital Ocean API 创建几个 Droplet(服务器的名称)。
这些 droplet 可以获取用户元数据,该元数据基本上是一个带有 shell 命令的文件,我想运行该命令来在创建时配置服务器。
这里给出一个例子:
https://www.digitalocean.com/community/tutorials/an-introduction-to-droplet-metadata
坦白说,我只需要检查 bash 脚本是否成功运行。我知道有几种繁琐的方法来检查这一点,但我希望能有更简单的方法。
我猜最简单的方法是查看机器上运行的命令的历史记录或类似的东西。对于从 shell 脚本运行的命令,这可行吗?
我知道该history
命令,但它只适用于ssh'ed
在机器中输入的命令。这实际上并不显示来自我的 bash 脚本的命令。
希望有人知道一种快速简便的方法来查看机器上运行的所有命令。
干杯。
答案1
您的脚本应该执行某些操作。只需检查该操作是否确实发生即可。
如果这不可能的话,只需添加类似
touch /tmp/mycheckfile
到脚本末尾,然后检查该文件是否存在。简单、轻松、快速。
请注意,这不是正确的错误处理,它所做的只是验证脚本是否已执行。如果您将其放在set -e
脚本的顶部,它也会在任何错误时终止,因此,如果脚本中出现任何问题,则不会创建文件。
如果您想要更加复杂,您可以使用 bash 允许的所有错误报告和输出重定向方法,包括使用命令记录到系统日志logger
。
您还可以使用 输出脚本运行的每一行set -x
。在 DO 中,输出将列在 cloud-init 服务的 syslog 中。您还可以将其捕获到文件中,如下所示:
#!/bin/bash
set -x
{
do-something
do-something-else
} 2>/tmp/mylogfile
将产生如下文件内容:
+ do-something
+ do-something-else
请注意,我STDERR
用 重定向了输出2>
,因为这些行将被发送到该流。