You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ESXi虚拟机监控程序中开启Shell脚本执行命令的日志记录?

如何在ESXi虚拟机监控程序中开启Shell脚本执行命令的日志记录?

这个问题我在运维ESXi环境时也碰到过,默认情况下ESXi的shell.log确实只会记录交互式Shell里直接输入的命令——毕竟脚本执行属于非交互式会话,不会被系统默认的日志规则捕获。不过有几种实用的方法可以实现脚本内命令的日志记录,我给你详细说说:

方法一:修改脚本本身,内置日志追踪

最直接的方式是给脚本加上命令追踪和日志输出配置,步骤很简单:

  1. 在脚本开头添加set -x,这个参数会让Shell把执行的每一条命令都打印出来;
  2. 把追踪输出重定向到shell.log或者你指定的日志文件。

修改后的脚本示例:

#!/bin/sh
# 自定义日志格式,贴近原生shell.log的样式
export PS4='<164>$(date "+%Y-%m-%dT%H:%M:%SZ") $(hostname) shell[$$]: [root]: '
# 将命令追踪的输出追加到shell.log
exec 2>> /var/log/shell.log
# 开启命令追踪
set -x

echo "Test"
ls -la
find / -name "*.log" -exec /bin/rm -rf {} \;

解释一下:

  • PS4变量定义了set -x输出的前缀格式,和原生shell.log的格式保持一致,方便后续查看;
  • exec 2>> /var/log/shell.log把脚本的标准错误输出(set -x的内容会输出到stderr)追加到日志文件;
  • set -x开启命令追踪,每条命令执行前都会把命令内容打印到日志。

方法二:执行脚本时强制开启日志(无需修改脚本)

如果不想改动原脚本,可以在执行的时候通过Shell参数强制开启追踪,并把输出定向到日志:

sh -x your_script.sh >> /var/log/shell.log 2>&1
  • -x参数开启命令追踪,2>&1把标准错误和标准输出都重定向到日志文件,这样脚本里的所有命令和输出都会被记录下来。

方法三:全局开启非交互式Shell的日志(进阶)

如果你希望所有非交互式脚本的执行命令都被记录,可以修改ESXi的Shell全局配置:

  1. 编辑/etc/profile文件(这是全局环境变量配置文件);
  2. 添加以下内容:
# 配置日志格式
export PS4='<164>$(date "+%Y-%m-%dT%H:%M:%SZ") $(hostname) shell[$$]: [root]: '
# 开启命令追踪并将输出追加到shell.log
exec 2>> /var/log/shell.log
set -x

不过要注意:这个配置会影响所有非交互式Shell会话,包括系统自带的脚本,可能会导致shell.log快速增大,建议配合ESXi的日志轮转功能一起使用。

额外注意事项

  • 确保你有/var/log/shell.log的写入权限,root用户默认没问题,普通用户需要提前授权;
  • 如果不需要记录脚本的输出内容,只需要命令本身,可以只重定向set -x的输出(也就是标准错误),不用管标准输出。

备注:内容来源于stack exchange,提问作者Cool Guy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 13:02:47