"sudo crontab -e" 和 "crontab -e" 在 Linux 上有什么区别?

26
我注意到当我输入sudo crontab -e时,我的cron命令不会显示,但是当我只输入crontab -e时,命令就出现了。
这两者有区别吗?如果有的话,那我应该把我的cron命令放在sudo里还是在没有sudo的情况下?
谢谢!

1
我认为这应该属于http://unix.stackexchange.com/,因为它与编程无关。 - sknt
@ Skynet 哦,我明白了。那是其他人投反对票的原因吗?:( - PinoyStackOverflower
我猜吧。但是经过一点调查,我发现这个问题实际上是一个重复的问题:http://serverfault.com/questions/817499/when-to-use-sudo-with-crontab(而且它偶然地还被踩了)。 - sknt
2个回答

38

这两种方法有什么区别吗?

是的,它们确实不同。 区别在于使用 sudo crontab -e 命令时,命令将以 root 用户的凭据进行调度,因此 sudo 的 Cron 表中的命令将作为 root 用户执行。

但是使用 crontab -e 命令时,命令将以正在登录的常规用户的身份进行调度。

我的 cron 命令应该放在哪里,应该使用 sudo 还是不使用 sudo?

好的,这取决于您想运行的命令类型。
如果命令需要 sudo 权限,则应使用 sudo crontab -e
否则,如果 cron 命令不需要任何特殊权限,则使用 crontab -e

例如:
如果要在特定时间禁用或启用以太网网络接口 eth0,则应使用如下命令:
ifconfig eth0 up 或者 ifconfig eth0 down
由于上述命令需要特殊权限(sudo),因此这些命令应添加到 sudo 的 Cron 表中。

其他任何需要最少权限或无需权限的命令,例如从 tmp 目录中删除文件的命令如 $ rm /tmp/somefile,请使用常规用户的 crontab。


@PinoyStackOverflower 欢迎。很高兴我能回答 :) - Santosh A
@Santhosh,你能告诉我sudo crontab -ecrontab -e的路径吗?因为我需要通过Bash脚本以编程方式添加corn表达式。 - Koder101
@Koder101 /usr/bin/crontab - Santosh A
谢谢,我已经弄清楚Ubuntu中sudo用户的路径是/var/spool/cron/crontabs/ - Koder101
这是一个很好的解释。谢谢@Santosh。 - Usman Liaqat

0

问题的主要部分是要关注您想要完成任务的用户。否则,它将无法触发您的cron作业。并确保您将命令输出写入任何文件中。这将帮助您调试问题,这些问题很可能与您的相关路径有关。

这就是我所遇到的困难。您可以按照以下步骤继续:

  1. 确定您要使用的用户名。使用whoami命令。
  2. 切换到所选用户模式,键入crontab -e
  3. 追加行 < cron-schedule your-command >> output_filename.cron 2>&1 >
  4. 就这样。

谢谢!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接