我需要每天运行一个脚本。该脚本应该以特定用户(例如 user1)的身份运行,而不是以 root 身份运行。因此,我将 cron 文件放在 /etc/cron.d 中,并将用户名放在行中(第二列)。但它给出了一个错误,说找不到该命令。我怀疑该脚本不是以 user1 的环境运行的。我是不是漏掉了什么?
答案1
只有/etc/crontab
和 中的文件/etc/cron.d/
才有用户名字段。在该文件中,您可以执行以下操作:
1 1 * * * username /path/to/your/script.sh
您可以从 root 的 crontabsudo crontab -e
使用:
1 1 * * * su username -c "/path/to/your/script.sh"
或者你可以像这样使用用户的实际 crontab:
sudo crontab -u username -e
这第二列在任何 crontab 文件中,都是您希望作业运行的小时数。您指的是第六个字段吗?
答案2
如果您使用的可执行文件位于 /usr/local/bin 中,则可能需要为该用户设置 PATH。要设置 PATH,请在 cronjobs 之前放置如下内容:
PATH=/bin:/usr/bin:/usr/local/bin
*/5 * * * * user1 sample_executable
另一种方法是在你的 cronjob 中完整指定 sample_executable 的路径,因此:
*/5 * * * * user1 /path/to/sample_executable
如果 sample_executable 引用的可执行文件不在标准 PATH 中,则应使用第一个选项。
答案3
用户 crontabs 的典型目录位于 /var/spool/cron/crontabs。文件格式不包含用户名。用户 crontabs 由用户拥有并以用户模式 0600 命名。最好的处理方法是编写 tab 文件,然后使用它crontab -u username filename
为该用户设置所需的任何 cron 条目。