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。
$PATHcronjob中定义的环境变量那样等同于已登录用户的环境变量(例如,在我的linuxbox上定义了$ HOME,但是将$ PATH设置为/usr/bin与/bincrontab和$ 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 wdayusercommandsudo
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将是更清洁的解决方案:)