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

Ubuntu 18.04下Cron任务执行脚本的认证及路径异常问题

解决Cron执行Ubuntu 18.04脚本的核心问题

从你的配置和日志信息来看,问题集中在Cron环境变量缺失和sudo无交互认证失败两个关键点上,咱们一步步来修复:

1. 解决date/grep命令找不到的报错

你在crontab里定义的PATH漏掉了/bin目录——而date、grep这类基础系统命令正是存放在/bin里的。手动运行脚本时,你的用户环境PATH包含这个目录,但Cron的执行环境是极简的,所以会触发"command not found"错误。

修复方案:

修改crontab中的PATH配置,添加/bin:

PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/rob/scripts

或者更稳妥的方式:直接在脚本里使用命令的绝对路径,比如/bin/date、/bin/grep,彻底摆脱对PATH的依赖。

2. 解决sudo: no tty present and no askpass program specified错误

Cron运行脚本时处于无终端(tty)的非交互式环境,而sudo默认需要交互式输入密码,因此会出现认证失败的问题。有两种常用解决思路:

方法一:让脚本中的sudo命令免密码验证

使用visudo编辑sudoers配置文件(必须用这个命令,避免语法错误导致sudo失效):

sudo visudo

在文件末尾添加一行(替换成你脚本中需要sudo执行的具体命令,比如脚本里是sudo /usr/bin/xxx,就写对应路径):

rob ALL=(ALL) NOPASSWD: /path/to/your/sudo/command

如果脚本中有多个sudo命令,要么逐个添加路径,要么(仅限完全信任的用户)允许该用户所有sudo操作免密:

rob ALL=(ALL) NOPASSWD: ALL

保存退出后,Cron再执行脚本时sudo就不会要求输入密码了。

方法二:避免在Cron脚本中使用sudo

如果脚本的操作不需要root权限,调整目标文件/目录的权限,让普通用户rob能直接执行:

sudo chown rob:rob /path/to/target/file
sudo chmod u+rwx /path/to/target/file

验证修复效果

修改完成后,重新加载crontab配置:

crontab -e
# 保存退出后,Cron会自动加载新配置

等待一分钟(你的scan2.sh是每分钟执行一次),查看/home/rob/scripts/scan.log,之前的错误应该就不会再出现了。

内容的提问来源于stack exchange,提问作者Rob Berry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:44:25