tvg*_*ert 11 permissions mac-osx-server cron
我想设置一个 cron 作业,它在目录(保管箱目录)上递归地执行 chmod/chown。
这在我手动执行命令时有效,例如:
sudo chown -R $USER ~/Dropbox
sudo chmod -R u+rw ~/Dropbox
Run Code Online (Sandbox Code Playgroud)
我试图将其转换为这样的 cron 作业:
10 * * * * sudo chown -R $USER ~/Dropbox
Run Code Online (Sandbox Code Playgroud)
但它似乎并没有完成这项工作。
这该怎么做?
vor*_*aq7 17
sudo
应该几乎 从来没有在计划任务中使用。它希望能够与终端通信,并需要特定的标志来避免尝试这样做。
以 root 身份创建您的 cron 作业(在/etc/crontab
- 请注意,此文件的格式略有不同 :)。
这也有利于在未安装的系统上工作。minute hour mday month wday
user
command
sudo
dr *_*bob 11
您希望您的根 cron 脚本(通过运行编辑sudo crontab -e
)为:
55 * * * * /bin/chown -R somename /home/somename/Dropbox && /bin/chmod u+rw /home/somename/Dropbox
Run Code Online (Sandbox Code Playgroud)
假设用户已命名somename
并且这/home/somename/Dropbox
是您的 Dropbox 目录的完整路径。作为 root 用户, ~ 转到/root
.
两个问题:
1) 通常在 cron 中设置路径的方式与您登录时的设置方式不同。尝试 /usr/bin/sudo /bin/chown ...(或系统上这些程序的任何正确路径)。
2) sudo 通常会询问您的密码,否则可能无法以非交互方式运行。我建议您将命令放在 root 的 crontab 中而不使用 sudo,然后命令以 root 身份运行。
您的 crontab 存在多个问题:
10 * * * sudo chown -R $USER ~/Dropbox
Run Code Online (Sandbox Code Playgroud)
问题:
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
Run Code Online (Sandbox Code Playgroud)
(该eval
需要转换~$1
到~user
然后到/home/user
)。
从 root 的 crontab 运行这个脚本:
# root's crontab
10 * * * /usr/local/bin/myscript someuser
Run Code Online (Sandbox Code Playgroud)