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

在root的crontab中执行脚本时,如何检测系统初始登录的非root用户?

在root的crontab中执行脚本时,如何检测系统初始登录的非root用户?

我太懂你这个痛点了!之前你试了好几种方法,比如依赖SUDO_USER、logname或者直接判断EUID的逻辑,手动跑脚本(不管是用sudo还是root账号直接执行)都能拿到正确的非root用户,但一放到root的crontab里就只能输出root——这是因为crontab的执行环境没有关联到登录用户的上下文,那些依赖会话信息的变量或命令自然就失效了。

你之前尝试过但在crontab中失效的方法包括:

  • local_user=${who -m | awk '{print $1;}'}
  • local_user=${logname 2>/dev/null || echo $SUDO_USER}
  • local_user=$(logname)
  • local_user=$(ps -o user= -p $$)
  • 基于EUID或SUDO_USER的分支判断逻辑

不过好在你已经找到了解决方案,这两个方法在root的crontab里能正常获取到系统初始登录的非root用户:

方法一:通过进程UID筛选普通用户

Ubuntu系统中普通用户的UID通常从1000开始,这个命令会遍历所有进程,筛选出符合UID范围的用户,并且只返回第一个出现的用户:

local_user=$(ps -eo user,uid | awk 'NR>1 && $2 >= 1000 && ++seen[$2]==1{print $1}')

方法二:直接取登录用户列表的第一个用户

who命令会列出当前所有登录的用户,取第一个结果就是系统初始登录的非root用户:

local_user=$(who | head -1 | awk '{print $1;}')

你可以把这两个命令放到你的测试脚本里,再用root的crontab定时执行,就能得到正确的用户结果了,再也不会输出root啦!

备注:内容来源于stack exchange,提问作者acgbox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:48:15