我想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
不会理解它 我想我会真的编写它:
#!/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来实现相同/相似的结果。