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

我想build立一个cron作业,recmodively做一个目录(dropbox目录)chmod / chown。

这在我手动执行这些命令时起作用,如:

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

我试图把它转换成这样的cron工作:

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

但似乎没有做这项工作。

如何做到这一点?

你需要你的root cron脚本(通过运行sudo crontab -e编辑):

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

假设用户名为somename ,并且/home/somename/Dropbox是Dropbox目录的完整path。 作为root用户,〜到/root

应该几乎 不会在计划任务中使用sudo 。 它期望能够与terminal通话,并且需要特定的标志来避免尝试这样做。

以root身份创build你的cron作业(在/etc/crontab – 请注意,这个文件的格式略有不同: minute hour mday month wday user command )。
这也有利于在没有安装sudo系统上运行。

两个问题:

1)path通常不会像login时一样设置。尝试/ usr / bin / sudo / bin / chown …(或者任何正确的path到您的系统上的程序)。

2)sudo通常要求input密码,否则可能会不愉快地运行非交互式。 我build议你把命令放在root的crontab中而不用sudo,然后这些命令以root身份运行。

你的crontab有多个问题:

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

问题:

  • sudo不应该在这里使用; 它需要terminalinput
  • 应该完全指定chown (即, /bin/chown
  • USER作为实际variables可能不存在; 有些系统使用LOGNAME
  • ~ (代字号)只能被shell识别 – 一个空的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 。)

从root的crontab运行这个脚本:

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

或者,您可以启用ACL支持并使用setfacl来实现相同/相似的结果。