使用bash.sh运行cron权限被拒绝

时间:2014-02-08 13:26:32

标签: php linux bash shell cron

如何在这里运行带有bash脚本的cron。我做了如下操作,这里有错误。我想知道如何在ubuntu中做到这一点。我现在已经被它击中了

bash.sh文件

#!/bin/bash
cd /var/www/Controller
/usr/bin/php post.php

在crontab -e

* * * * * /home/samitha/bash.sh >> /home/samitha/log/cron.log 2>&1

但现在我得到了以下错误

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

我将如何修复它?我做错了什么?

5 个答案:

答案 0 :(得分:11)

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

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 :(得分:1)

执行该cron的用户(执行cron -e的用户)没有执行该脚本的适当权限。也就是说:要么脚本缺少执行标志,要么就无法到达它,因为它的一些祖先目录缺少执行标志。

答案 2 :(得分:1)

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

首先设置脚本的执行标志

chmod +x /home/samitha/bash.sh

然后你应该用

检查php文件的权限
ls -lah /var/www/Controller

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

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

sudo crontab -e

或第二个(我不推荐,因为每个人都可以通过致电你的网站来执行脚本)

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

答案 3 :(得分:0)

  • 文件必须是可执行的(@see chmod)
  • 所有父目录必须具有执行标志(@see chmod)
  • 如果crontab由不同的用户运行,即不是所有者,则该用户可能无权执行。 (@see chown)

答案 4 :(得分:0)

TL; DR:在crontab和该脚本调用的任何脚本中的脚本之前插入“ bash”。

我已解决此问题。以前的答案都没有对我有用。我有两台运行Kubuntu(已更新至内核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”。