获取 cronjob 的所有者/用户

获取 cronjob 的所有者/用户

在 Linux (Mint / Ubuntu) 中,我可以为每个用户单独创建 cronjobs。有什么办法,我可以找出运行 cronjob 的用户的名称。我想在 shell 脚本中获取 cronjob 所有者的用户名,该脚本将执行 cron'd...

答案1

获取脚本的所有者

stat在任何与现代 GNU 兼容的系统上stat,脚本所有者的用户 ID 是:

stat -c %u "$0"

脚本所有者的用户名是:

stat -c %U "$0"

一般来说,在 Linux 上,stat -c %U file返回file.我们替换为$0因为该变量通常包含当前脚本文件的名称。

获取运行脚本的用户的有效用户ID

要获取运行脚本的用户的有效用户 ID 号,请使用id -u

$ id -u
1001

将其保存在变量中

$ uid=$(id -u)
$ echo "$uid"
1001

如果脚本在以下环境下运行bash,则有效用户 ID 存储在 shell 变量中EUID

$ echo $EUID
1001

在许多系统上,默认情况下 cronjobs 在dash不支持EUID.因此,id -u如上图所示,使用起来更加安全可靠。

-n除了使用该-u选项来获取用户名之外,还使用该选项:

$ id -un
john1024

答案2

man 5 crontab建议 cronjob 将在LOGNAME环境变量中查找拥有用户的用户名:

几个环境变量由 cron(8) 守护进程自动设置。 SHELL设置为/bin/shLOGNAME 和 是从crontab 所有者的行 HOME 设置的 。并且可以被 crontab 中的设置覆盖;不能。/etc/passwdHOMESHELLLOGNAME

(注意:该LOGNAME变量有时会USER在 BSD 系统上调用,并且也会自动设置)。

相关内容