设置一个执行chmod / chown的cron作业


9

我想设置一个cron作业,该作业可重复地在目录(dropbox目录)上执行chmod / chown。

当我手动执行命令时,此方法有效:

sudo chown -R $USER ~/Dropbox
sudo chmod -R u+rw ~/Dropbox

我试图将其转换为像这样的cron作业:

10      *       *       *       *       sudo chown -R $USER ~/Dropbox

但这似乎没有完成。

这个怎么做?


incron+ inotify将是更清洁的解决方案:)
franzlorenzon 2014年

Answers:


9

您希望您的根cron脚本(通过运行sudo crontab -e进行编辑)为:

 55 * * * * /bin/chown -R somename /home/somename/Dropbox && /bin/chmod u+rw /home/somename/Dropbox

假设用户已命名,somename并且这/home/somename/Dropbox是您Dropbox目录的完整路径。以root用户身份,〜转到/root


1
感谢您的明确答复!我认为这向我展示了一些我一直在寻找的缺失链接。我明天会首先测试它:)
tvgemert 2012年

经过测试,并且可以正常工作!
tvgemert 2012年

2
大; 很高兴它的工作。这些教训是(a)不要期望像$PATHcronjob中定义的环境变量那样等同于已登录用户的环境变量(例如,在我的linuxbox上定义了$ HOME,但是将$ PATH设置为/usr/bin/bincrontab和$ USER进行往返)未定义;因此在这种情况下,您无需/bin在chmod / chown之前指定),(b)避免sudo在脚本中(以root用户身份运行cron任务),(c)由于root用户$HOME将引用/ root而不是普通用户,(d)~在cron脚本中应避免使用(默认情况下以#!/bin/sh
开头

如果您做任何比这更复杂的事情,我还建议按照David的建议放入脚本。对于chmod / chown的组合,脚本似乎是过分杀伤力的。但是,如果您开始申请其他用户的Dropbox或其他目录,或者决定仅在最近更改的文件(例如,的结果find)等上运行,那么在脚本中放置它就没有意义了。
jimbob博士2012年

16

sudo应该几乎 从来没有在计划任务中使用。它期望能够与终端通信,并且需要特定的标志以避免尝试这样做。

而是以root身份创建cron作业(在/etc/crontab-中,请注意,此文件的格式略有不同 :)。 这还具有在未安装的系统上工作的好处。minute hour mday month wdayusercommand
sudo


谢谢!我创建了这个,但是我仍然不确定。我没有得到预期的结果: 55 * * * * root chown -R somename ~/Dropbox
tvgemert 2012年

3
somename可能在任何地方 这是一条相对的道路。其次,~只能被shell理解;使用$HOME。使用如下命令:(chown -R /some/path/somename $HOME/Dropbox这将使用root主目录...)
Mei

@David:somename不是路径,而是用户名(并且还应包含组名:somename:somegroup);)
knittl 2012年

5
@tvgemert David上面关于路径/相对路径/符号路径(~)所说的(以及他的回答)非常重要 -请花一些时间在cron和crontab手册页上,并确保您了解发生了什么(如有疑问) ,创建一个执行该任务的cron作业,echo "what you want to do" > /tmp/what-i-would-run并查看结果以确保它们是理智的-从而大大减少了摧毁宇宙的机会。)
voretaq7 2012年

感谢有用的提示,已经给了我更多的见解!
tvgemert 2012年

6

两个问题:

1)路径通常在cron中的设置方式与登录时不同。请尝试/ usr / bin / sudo / bin / chown ...(或任何指向系统上程序的正确路径)。

2)sudo通常会询问您的密码,否则可能会不满意地以非交互方式运行。我建议您将命令放在不带sudo的root的crontab中,然后命令以root身份运行。


5

您的crontab有多个问题:

10 * * * sudo chown -R $USER ~/Dropbox

问题:

  • sudo这里不应该使用;需要终端输入
  • chown应完整指定(即/bin/chown
  • USER因为实际变量可能不存在;一些系统使用LOGNAME
  • ~(波浪号)将仅由外壳识别-裸机chown将无法理解
  • 在root的crontab中指定HOME转到root的home

我想我实际上会编写脚本:

#!/bin/bash

# FILE: /usr/local/bin/myscript

USER=$1
eval chown -R $1 ~$1/Dropbox
eval chmod -R u+rw ~$1/Dropbox

(该eval需要转换~$1~user 然后/home/user)。

从根目录的crontab运行以下脚本:

# root's crontab
10 * * * /usr/local/bin/myscript someuser

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.