Permission denied with bash.sh to run cron
如何在这里使用bash脚本运行cron。我在以下操作以及此处出现错误。我想知道如何在ubuntu中执行此操作。
bash.sh文件
1 2 3 | #!/bin/bash cd /var/www/Controller /usr/bin/php post.php |
在crontab -e
中
但是现在我得到以下错误
1 | /bin/sh: 1: /home/samitha/bash.sh: Permission denied |
我该如何解决?我做错了什么?
您也可以尝试以下解决方案:
1 2 3 4 5 6 7 8 9 10 |
问题可能是您的用户无权执行文件。
首先,为脚本设置执行标志
1 |
然后您应该使用
检查php文件的权限
1 | ls -lah /var/www/Controller |
如果您的用户组和用户名均未显示,则必须使用超级用户权限运行脚本或更改其权限。
第一种方法是将您的条目放入
1 | sudo crontab -e |
或第二个将是(我不建议这样做,因为每个人都可以通过调用您的网站来执行脚本)
1 |
执行该cron的用户(执行cron -e的用户)没有执行该脚本的适当权限。也就是说:脚本缺少执行标志,或者由于某些祖先目录缺少执行标志而无法访问该脚本。
TL; DR:在crontab中以及该脚本调用的任何脚本中的脚本之前插入" bash"。
我有个解决办法。以前的答案都没有对我有用。我有两台运行Kubuntu的Asus笔记本电脑(已更新至内核v5.8),配置几乎相同。我不知道为什么一个人有问题而另一个人没有问题。但是,经过2天的实验,我找到了解决方法。希望有人比我能找到原因。
Cron使用sh代替bash。我尝试在crontab中的命令上方添加SHELL = / bin / bash并定义PATH,但这没有任何效果。我所有的脚本开头都带有#!/ bin / bash shebang,也没有任何效果。我的脚本(及其目录)的权限为777。无论我对文件尝试使用哪种user:group组合,这些脚本都不能为cron或用户运行。使用完整路径名是cron,并且在脚本内部与使用环境变量没有什么不同。
我的解决方法是在crontab中的脚本文件名之前插入" bash"。例如:
00 01 * * * bash $ BASH_SCRIPTS / backup_os.sh
(是的,cron使用在/ etc / environment中定义的环境变量没有问题。)而且,在cron中,当一个脚本运行另一个脚本时,第二个脚本将获得"权限被拒绝",除非将该脚本修改为在第二个脚本的文件名之前使用" bash",如果可以使用您的脚本,则使用" source"。
- 文件必须是可执行文件(@see chmod)
- 所有父目录必须具有执行标志(@see chmod)
- 如果crontab由其他用户(即不是所有者)运行,则该用户可能没有执行权限。 (@请参阅chown)