关于php:bash.sh拒绝运行cron的权限

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
* * * * * /home/samitha/bash.sh >> /home/samitha/log/cron.log 2>&1

但是现在我得到以下错误

1
/bin/sh: 1: /home/samitha/bash.sh: Permission denied

我该如何解决?我做错了什么?


您也可以尝试以下解决方案:

1
2
3
4
5
6
7
8
9
10
chmod +x post.php
chmod +x bash.sh
echo"* * * * * /home/samitha/bash.sh >> /home/samitha/log/cron.log 2>&1">> cronjob

chmod +x cronjob

/etc/init.d/crond start  #redhat based servers like centos
/etc/init.d/cron  start  #debian based servers like ubuntu

crontab cronjob


问题可能是您的用户无权执行文件。

首先,为脚本设置执行标志

1
chmod +x /home/samitha/bash.sh

然后您应该使用

检查php文件的权限

1
ls -lah /var/www/Controller

如果您的用户组和用户名均未显示,则必须使用超级用户权限运行脚本或更改其权限。

第一种方法是将您的条目放入

1
sudo crontab -e

或第二个将是(我不建议这样做,因为每个人都可以通过调用您的网站来执行脚本)

1
 chmod a+x /var/www/Controller/post.php

执行该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)