以特定用户身份运行的crontab


20

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


3
您能告诉我们您正在使用的crontab条目吗?
user9517 2012年

Answers:


34

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

1 1 * * * username /path/to/your/script.sh

在root的crontab中,sudo crontab -e您可以使用:

1 1 * * * su username -c "/path/to/your/script.sh"

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

sudo crontab -u username -e

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


/etc/cron.d中的文件带有用户参数:help.ubuntu.com/community/CronHowto#Advanced_Crontab,如果以root 用户身份执行,为什么还要执行“ sudo su”?无论如何,您都希望“ su -l”为用户使用登录环境,因为从问题的描述来看,这很可能是PATH问题。
cjc 2012年

/etc/cron.d中的文件不是/ etc / crontab的扩展名吗?在系统上,我必须将/etc/cron.d中的所有文件都指定一个用户名。
user9517 2012年

的确如此。 /etc/cron.d/文件是的一部分/etc/crontabsudo也毫无意义。我将删除该部分。
Ladadadada 2012年

2
关于将sudo放入crontab中:(a) sudo su...通常是不必要的;sudo -u <user> <command>通常就足够了。(b)如果未连接TTY,sudo在某些系统上会阻塞(例如,由cron运行时)。这可以在您的sudoers文件中解决。
tylerl 2012年

4

如果您正在使用的可执行文件位于/ 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中,则应使用第一个选项。


1

用户crontabs的典型目录位于/ var / spool / cron / crontabs中。文件格式是一种不包含用户名的格式。用户crontab由用户拥有,并以0600模式的用户命名。最好通过编写选项卡文件并crontab -u username filename用于为该用户设置所需的cron条目来处理。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.