crontab 以特定用户身份运行

Sam*_*ong 43 cron

我需要每天运行一个脚本。该脚本应该以特定用户(例如 user1)而不是 root 身份运行。所以我将 cron 文件放在 /etc/cron.d 并将用户名放在行(第 2 列)中。但是它给出了一个错误,说找不到命令。我怀疑该脚本不是作为 user1 的环境运行的。我错过了什么?

Lad*_*ada 74

只有/etc/crontab和 中的文件/etc/cron.d/有一个用户名字段。在该文件中,您可以执行以下操作:

1 1 * * * username /path/to/your/script.sh
Run Code Online (Sandbox Code Playgroud)

从 root 的 crontabsudo crontab -e你可以使用:

1 1 * * * su username -c "/path/to/your/script.sh"
Run Code Online (Sandbox Code Playgroud)

或者您可以像这样使用用户的实际 crontab:

sudo crontab -u username -e
Run Code Online (Sandbox Code Playgroud)

任何 crontab 文件中的第二列是您希望作业运行的小时。你是说第六场吗?

  • 关于将 sudo 放入 crontab:**(a)** `sudo su...` 通常是不必要的;`sudo -u <user> <command>` 通常就足够了。**(b)** 如果没有连接 TTY(例如由 cron 运行时),sudo 将在某些系统上窒息。这可以在您的 sudoers 文件中修复。 (2认同)

cjc*_*cjc 7

如果您使用的可执行文件在 /usr/local/bin 中,您可能需要为该用户设置 PATH。要设置 PATH,请在 cronjobs 之前放置如下内容:

PATH=/bin:/usr/bin:/usr/local/bin

*/5 * * * * user1 sample_executable
Run Code Online (Sandbox Code Playgroud)

另一种方法是在您的 cronjob 中完全指定 sample_executable 的路径,因此:

*/5 * * * * user1 /path/to/sample_executable
Run Code Online (Sandbox Code Playgroud)

如果 sample_executable 引用不在标准 PATH 中的可执行文件,则应使用第一个选项。


Jef*_*and 5

用户 crontabs 的典型目录位于 /var/spool/cron/crontabs 中。文件格式是不包含用户名的格式。用户 crontab 由用户拥有,并以模式 0600 的用户命名。最好的处理方法是编写选项卡文件并用于crontab -u username filename设置您想要为该用户设置的任何 cron 条目。