运维脚本需强制校验root权限与执行权限,切换至脚本真实目录,启用set -euo pipefail并显式处理预期失败,日志与临时文件须指定路径并用trap清理。

脚本启动时强制校验执行权限和运行用户
很多运维脚本在生产环境因被普通用户误执行或缺少 x 权限而静默失败,后续逻辑全崩。必须在开头显式检查:[ "$(id -u)" = "0" ] || { echo "ERROR: must run as root"; exit 1; };同时用 test -x "$0" 确认自身可执行——别依赖调用方加 bash script.sh 这种绕过权限的方式,那会让 $0 变成 bash,dirname "$0" 失效。
路径处理一律用绝对路径 + cd "$(dirname "$(readlink -f "$0")")
运维脚本常要读配置、写日志、调用同目录工具,相对路径在 cron 或 systemd 中极易出错。必须在开头就切到脚本所在真实目录:cd "$(dirname "$(readlink -f "$0")")。注意:readlink -f 在 macOS 不可用,Linux 发行版中也存在 BusyBox 版本不支持的情况,若需兼容,改用 cd "$(dirname "$0")"; cd "$(pwd -P)" 更稳妥。
关键命令后必须检查 $? 并设 set -e 的例外点
set -e 能让脚本在任意命令失败时退出,但会误杀预期非零的场景(比如 pidof mysvc 返回 1 表示进程未运行)。正确做法是:全局启用 set -euo pipefail,对允许失败的命令显式处理:if ! systemctl is-active --quiet nginx; then echo "nginx not running, skipping reload"; else systemctl reload nginx; fi。尤其注意管道命令——ps aux | grep -q nginx 的失败由 grep 决定,ps 错误会被吞掉,必须拆开或用 set -o pipefail。
TAYGOD免费企业建站系统是一款开源的免费程序,您可以 TAYGOD免费企业建站系统ASP版是一款基于asp+access的免费开源建站系统。整套系统的设计构造,完全考虑中小企业类网站的功能要求,网站后台功能强大,管理简捷,支持模板机制,能够快速建立您的企业网站。 系统特性: 采用流行的asp+access设计,功能强,实用性高。 代码美工完全分离,维护更方便。 对运行环境要求低,基本上一般的
日志与临时文件必须指定明确路径且自动清理
别用 /tmp 存长期日志,它可能被系统清理;也别用 mktemp 创建后不记录路径,导致调试时找不到临时文件。标准做法:LOG_DIR="/var/log/myscript"; mkdir -p "$LOG_DIR"; LOG_FILE="$LOG_DIR/$(date +\%Y\%m\%d).log"; trap 'rm -f "$TMPFILE"' EXIT。其中 trap 是关键——哪怕脚本被 kill -9 之外的信号中断,也能清理临时资源。另外,所有重定向日志建议加时间戳:echo "$(date '+%F %T') INFO: start backup" >> "$LOG_FILE"。
which、每一个 echo、每一次 cp,都要当作第一次在陌生机器上执行来验证。









