Answers:
您希望您的根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
。
$PATH
cronjob中定义的环境变量那样等同于已登录用户的环境变量(例如,在我的linuxbox上定义了$ HOME,但是将$ PATH设置为/usr/bin
与/bin
crontab和$ USER进行往返)未定义;因此在这种情况下,您无需/bin
在chmod / chown之前指定),(b)避免sudo
在脚本中(以root
用户身份运行cron任务),(c)由于root用户$HOME
将引用/ root而不是普通用户,(d)~
在cron脚本中应避免使用(默认情况下以#!/bin/sh
。
find
)等上运行,那么在脚本中放置它就没有意义了。
sudo
应该几乎 从来没有在计划任务中使用。它期望能够与终端通信,并且需要特定的标志以避免尝试这样做。
而是以root身份创建cron作业(在/etc/crontab
-中,请注意,此文件的格式略有不同 :)。
这还具有在未安装的系统上工作的好处。minute hour mday month wday
user
command
sudo
55 * * * * root chown -R somename ~/Dropbox
somename
可能在任何地方 这是一条相对的道路。其次,~
只能被shell理解;使用$HOME
。使用如下命令:(chown -R /some/path/somename $HOME/Dropbox
这将使用root
主目录...)
somename
不是路径,而是用户名(并且还应包含组名:somename:somegroup
);)
~
)所说的(以及他的回答)非常重要 -请花一些时间在cron和crontab手册页上,并确保您了解发生了什么(如有疑问) ,创建一个执行该任务的cron作业,echo "what you want to do" > /tmp/what-i-would-run
并查看结果以确保它们是理智的-从而大大减少了摧毁宇宙的机会。)
您的crontab有多个问题:
10 * * * sudo chown -R $USER ~/Dropbox
问题:
sudo
这里不应该使用;需要终端输入chown
应完整指定(即/bin/chown
)USER
因为实际变量可能不存在;一些系统使用LOGNAME
~
(波浪号)将仅由外壳识别-裸机chown
将无法理解我想我实际上会编写脚本:
#!/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
incron
+inotify
将是更清洁的解决方案:)