我需要更新我的网络用户(执行所有网站的用户)的 crontab。在我的 crontab 中,我使用带有需要使用“sudo”的命令的 shell 脚本。
脚本执行良好,但我收到错误消息,下面是几个示例:
mv: cannot move 'cms/configs/database.json' to './database.json': Permission denied
mv: cannot move 'cms/configs/options.json' to './options.json': Permission denied
mv: cannot move 'cms/configs/analytics.json' to './analytics.json': Permission denied
mv: cannot move 'cms/sql/patchs.json' to './patchs.json': Permission denied
mv: cannot move 'cms/public/uploads' to './uploads': Permission denied
mv: cannot move 'cms/node_modules' to './node_modules': Permission denied
我使用以下命令声明 crontab:sudo crontab -u mywebuser -e
如果我使用“sudo myscript.sh”在没有 crontab 的情况下执行脚本,一切都会按预期工作。
答案1
安装由该用户运行的系统作业文件。/etc/cron.d/web
例如,而不是通过命令的用户crontab
。
5 4 * * * mywebuser /opt/thing/myscript.sh
假设你的 crond 支持这一点,Vixie 就可以。
一个优点是 crond 现在负责成为正确的用户,而不是您。换句话说,您不需要定义配置和环境即可工作sudo
。
替换为您想要的时间、用户和脚本。并确保文件具有正确的权限以供该用户管理。
答案2
sudo myscript.sh
(如果没有用 定义替代用户sudo -u username
)将默认以 root 身份运行脚本。
sudo crontab -u mywebuser -e
另一方面,将设置一个 cron 作业来运行,不是以 root 身份运行,而是以用户“mywebuser”的更有限的权限运行...
该用户将无法修改其他用户(例如 root 用户)拥有的文件....
修复文件和目录的所有权和权限