使用at命令调度运行bash脚本未正常执行问题求助
问题根因
- at 任务的输出默认不会输出到发起任务的终端:at 是后台异步任务工具,脱离当前终端会话运行,执行产生的标准输出、标准错误默认会通过系统邮件发送给当前用户,不会直接打印在你操作的终端上。如果你的系统没有配置邮件服务,这些输出会直接丢失,你自然看不到任何运行迹象。
- 你当前的任务调用方式存在缺陷,脚本大概率没有成功执行:
- 你没有为
b.sh添加可执行权限的话,系统无法直接识别为可执行文件 - at 任务执行时的默认工作目录不是你发起命令的目录,直接写相对路径
b.sh会找不到目标文件 - 执行失败的报错只会进入默认的邮件通道,你在终端看不到任何提示
- 你没有为
修复方案
- 先给脚本添加可执行权限,同时记录脚本的绝对路径,比如你的脚本放在
/home/yourname/scripts/b.sh,执行命令:chmod +x /home/yourname/scripts/b.sh - 如果你需要在当前终端看到输出,先执行
tty命令查询当前终端的设备路径,返回结果类似/dev/pts/0,记好这个路径。 - 重新提交at任务,将输出重定向到指定终端,示例命令:
echo "/home/yourname/scripts/b.sh > /dev/pts/0 2>&1" | at now + 1 minute
等待1分钟即可在当前终端看到输出内容。 - 如果你不需要实时在终端看结果,也可以将输出重定向到日志文件排查问题:
echo "/home/yourname/scripts/b.sh > /tmp/b_sh_run.log 2>&1" | at now + 1 minute
任务执行完成后查看/tmp/b_sh_run.log文件即可确认执行结果。
内容的提问来源于stack exchange,提问作者iyers16
相关产品推荐
相关产品推荐

