如何以特定用户身份运行cron作业?


66

我想以我的计算机上的特定用户身份运行cron作业。如何指定要作为cron作业运行的用户?

cron作业将在服务器上运行(在Ubuntu 10.0.4上运行)。“用户”是专门为执行特定服务器端任务而创建的用户。这些“用户”具有以下共同点:

  • 无法登录系统
  • 具有对特定文件夹/文件的访问权限

Answers:


79

假设您不能仅登录并将其添加到该用户的crontab中,请在中放置一个文件/etc/cron.d。应该将其格式化为普通的cronjob,但要有一个额外的字段。在命令运行之前和计时之后,放置用户。您应该能够在系统上找到示例。

例:

#<timing>   <user> <command>
11 * * * *  root   /usr/lib/command

我认为这是正确的答案。我将不得不寻找一些示例并进行更多研究。
2010年

2
再加上我的一个,这是做您想要的最好的方法。更精确地看一下/ etc / crontab文件,您将看到,在时间模板之后和命令之前,在那里写有“ root”。这意味着“ root”运行那些命令。只需添加您自己的日程表,而不是“ root”使用任何用户。另外,请注意,如果您使用每个用户的crontab(如Eric D的建议),则可能会失去系统级crontab的功能(/ etc / crontab和/etc/cron.d)。
Patkos Csaba

3
我猜最好的解决方案是crontab -u <user> -e将所有内容都放在一个位置,您可以以root用户的身份进行操作。不过,我喜欢按功能将cron作业分组,而不是仅按用户分组,因此这对我来说是更可取的解决方案。
斯图尔特

41

以root用户身份,编辑user1的cron:

crontab -u user1 -e

您还可以使用以下命令启动命令:

su user1 -c foo bar

但是通常,脚本本身以root身份启动时会减少自己的访问权限。


1

我一直在寻找这几个星期,这终于奏效了...

以user1身份创建脚本

ssh user1@ipaddress
nano hourly-event.sh

输入一些命令

#!/bin/bash
echo "YAY it works" > /home/user1/yay.txt

使它可执行

chmod 755 hourly-event.sh

编辑user1的crontab

sudo crontab -u user1 -e

在底部指向您的脚本的一行

# m h  dom mon dow   command
*   *   *   *   *    bash ./hourly-event.sh

退出-保存更改(保存时将显示/ tmp目录...没关系)

等待分钟

打开您新创建的yay.txt

nano /home/user1/yay.txt

现在,您应该打开一个纳米窗口,并以“是的,它可以工作”作为第一行,也是唯一的一行,如果您的纳米窗口的底部显示“新文件” ...那么..我不知道

您还可以在/ var / spool / cron / crontabs / user1中检查user1的新crontab条目

和平


0

有时您可能希望用户加载其环境,尤其是在使用“ rbenv”,“ nvm”时,如下所示:

0 0 * * * source ~/.bash_profile && cd /opt/app/current && bundle exec ruby ...

(此处,该命令source ~/.bash_profile将加载Ruby或Node环境。

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.