升级Ubuntu后从crontab调用Unison报标准输入读取失败错误求助
解决crontab调用Unison出现"failure reading from the standard input"错误
Ubuntu从20.04.3 LTS升级到22.04.3 LTS后,通过crontab调用Unison同步脚本时出现以下错误:
Fatal error: failure reading from the standard input (End of file)
命令行直接执行unison SCRIPT同步正常,但crontab环境下触发报错,以下是针对性解决办法:
核心修复步骤
强制批处理模式:Unison在非交互环境下(如crontab)会因尝试读取stdin获取用户确认而触发EOF错误,添加
-batch参数可强制其自动执行所有默认操作,无需等待输入。同时建议指定Unison绝对路径,避免crontab环境PATH缺失问题:*/5 * * * * USER test -e /var/lock/unison-SCRIPT && exit 0 || (touch /var/lock/unison-SCRIPT;/usr/bin/unison SCRIPT -batch;rm /var/lock/unison-SCRIPT)优化锁文件权限:
/var/lock目录可能需要root权限,普通用户创建锁文件可能失败导致Unison重复运行。可将锁文件移至用户有权限的目录:*/5 * * * * USER test -e /home/USER/.lock/unison-SCRIPT && exit 0 || (mkdir -p /home/USER/.lock; touch /home/USER/.lock/unison-SCRIPT;/usr/bin/unison SCRIPT -batch;rm /home/USER/.lock/unison-SCRIPT)检查配置交互项:确保
SCRIPT.prf中无需要手动确认的配置,比如将confirmbigdel设置为false,或在命令行用-confirmbigdel=false覆盖默认值,避免触发交互逻辑。
原理说明
crontab运行环境的标准输入(stdin)处于关闭状态,而Ubuntu 22.04下的Unison默认行为更严格,会在需要同步确认时尝试读取stdin,从而触发EOF错误。-batch参数强制Unison进入非交互模式,适配crontab的运行环境。
内容的提问来源于stack exchange,提问作者StefanMz
相关产品推荐
相关产品推荐

