在 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/sh
、LOGNAME
和 是从crontab 所有者的行HOME
设置的 。并且可以被 crontab 中的设置覆盖;不能。/etc/passwd
HOME
SHELL
LOGNAME
(注意:该
LOGNAME
变量有时会USER
在 BSD 系统上调用,并且也会自动设置)。