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

AIX环境下nohup/cron执行ksh脚本报‘Not a terminal’错误求助

问题分析与解决

错误原因

在nohup或cron环境下,运行进程没有关联终端(tty),而你执行su时调用了script命令——这个工具的作用是记录终端会话,必须依赖终端才能运行,因此会抛出“Not a terminal”错误。从错误日志的命令行可以明确看到这一点:

su - orabq3 -c script -q -c "export BACKUP_DIR=${BACKUP_DIR} && /usr/local/oracle/sap/SAParchive_nb.ksh sid=BQ3 >  ${BACKUP_DIR}/BQ3_$(date +%Y%m%d%H%M%S).log 2>&1" /dev/null

你提供的脚本里没有显式使用script,推测是实际执行的脚本版本、或是SAParchive_nb.ksh内部调用了该命令,导致在无终端环境下触发错误。

解决步骤

1. 移除不必要的script命令

你已经通过> ${BACKUP_DIR}/...log 2>&1将备份脚本的输出重定向到日志文件,完全不需要额外用script记录会话。修改su执行的命令,去掉script相关部分:

将错误的命令形式:

su - "$owner" -c "script -q -c \"export BACKUP_DIR=${BACKUP_DIR} && /usr/local/oracle/sap/SAParchive_nb.ksh sid=$db >  ${BACKUP_DIR}/${db}_\$(date +\%Y\%m\%d\%H\%M\%S).log 2>&1\" /dev/null"

替换为:

su - "$owner" -c "export BACKUP_DIR=${BACKUP_DIR} && /usr/local/oracle/sap/SAParchive_nb.ksh sid=$db > ${BACKUP_DIR}/${db}_\$(date +\%Y\%m\%d\%H\%M\%S).log 2>&1"

2. 适配无终端环境的su调用

AIX的su在无终端环境下,可能会因加载用户交互式shell配置(如.profile、.kshrc)出现问题,可以显式指定shell并避免加载不必要的配置:

su - "$owner" -s /bin/ksh -c "export BACKUP_DIR=${BACKUP_DIR} && /usr/local/oracle/sap/SAParchive_nb.ksh sid=$db > ${BACKUP_DIR}/${db}_\$(date +\%Y\%m\%d\%H\%M\%S).log 2>&1"

3. 检查备份脚本内部依赖

如果修改后仍报错,需要排查SAParchive_nb.ksh是否存在依赖终端的操作(比如调用tty命令、使用需要终端的交互工具),若有则同步修改这些逻辑。

4. 验证修改效果

用nohup命令测试修改后的脚本:

nohup ksh -xv b.ksh > b.out &

查看b.out日志确认错误是否消除。

完整修改后的脚本片段

# Switch user and execute backup script
su - "$owner" -s /bin/ksh -c "export BACKUP_DIR=${BACKUP_DIR} && /usr/local/oracle/sap/SAParchive_nb.ksh sid=$db > ${BACKUP_DIR}/${db}_\$(date +\%Y\%m\%d\%H\%M\%S).log 2>&1"
# Remove the lock file
rm "${BACKUP_DIR}/${db}_backup.lck"

内容的提问来源于stack exchange,提问作者Saurabh Thakuria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:55:11