文档中心>自动化助手>操作指南>TAT 执行命令与本地执行脚本的差异

TAT 执行命令与本地执行脚本的差异

最近更新时间:2025-06-05 15:41:22

我的收藏
TAT 远程免密执行命令,是通过预装在服务器上的 TAT agent 与 TAT 服务端进行交互,从服务端拉取内容并保存为脚本文件,再执行这个脚本文件获取输出。

1、环境差异

TAT 在执行脚本时,会先加载常见的环境配置,再执行脚本。TAT 加载配置的方式可能与系统本地执行有所差异,造成环境不一致。

Linux 系统

Linux 系统下,会加载/etc/environment下的环境变量。在每次执行脚本时,使用如下命令启动脚本(假设脚本名为script.sh):
bash -c . /etc/profile 2>/dev/null; . ~/.bash_profile 2>/dev/null || . ~/.bashrc 2>/dev/null; script.sh
若系统内部使用了 bash 以外的 shell,则会直接使用sh -c script.sh来执行命令,不会加载任何配置文件。
说明:
TAT 不加载.bash_login 等与登录相关的配置文件,这是为了避免触发用户设置的一些登录时的初始化命令。
若因配置文件未加载,造成 TAT 执行命令行为与本地执行不一致,可以在命令内容中主动添加source命令加载配置文件。
此外,TAT 执行命令是绕过登录行为实现的,因此无法加载/etc/security/limits.conf等 PAM 配置。这也可能导致ulimit -n等命令的输出与系统本地执行不一致。可以通过在脚本中主动添加ulimit -n 65535等命令修改相关配置,或修改 TAT agent 服务配置来实现对默认 limit 的修改。
具体步骤如下:
1. 执行systemctl edit tat_agent.service编辑 tat_agent 的服务配置,编辑完成后,会生成一个 /etc/systemd/system/tat_agent.service.d/override.conf配置文件,里面的配置会覆盖原先的服务配置。(注意:override.conf中的注释不要删除,删除可能导致某些系统下修改失败)
2. 执行 systemctl restart tat_agent重启 TAT agent 服务。(注意:如果override.conf配置是用systemctl edit之外的方式修改的,则需要先执行systemctl daemon-reload重新加载。)

Windows 系统

Windows 系统下,会通过CreateEnvironmentBlock API 加载环境变量。在每次执行脚本时,使用如下命令启动脚本(假设脚本名为script.ps1):
powershell -ExecutionPolicy Bypass [Console]::OutputEncoding = [System.Text.Encoding]::UTF8; script.ps1
对于 Batch 脚本,使用如下命令启动(假设脚本名为script.bat):
cmd.exe /C script.bat

2、执行状态差异

TAT 执行命令会检查脚本的退出码,当退出码不为0时,会显示“命令失败”状态,并展示脚本的退出码。在系统本地执行时,可以通过echo $?命令在脚本完成后检查退出码。
TAT 执行命令有超时时间限制,默认是60s,最多可设置为86400s(一天)。执行超过设置的超时时间时,TAT 会主动 kill 掉脚本,并显示“命令超时”状态。

3、输出完整度差异

TAT 对输出结果有长度限制。当输出超出24KB字节时,命令将继续正常执行,但 TAT 将不会记录更多输出。可以通过开启执行结果上传到 COS 设置,将完整的输出结果上传到 COS 中保存,即可绕过长度限制获取完整输出。