使用 bash.sh 拒绝运行 cron 的权限
Posted
技术标签:
【中文标题】使用 bash.sh 拒绝运行 cron 的权限【英文标题】:Permission denied with bash.sh to run cron 【发布时间】:2014-03-05 23:23:38 【问题描述】:如何在此处使用 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
我将如何解决它?我做错了什么?
【问题讨论】:
chmod +x /home/samitha/bash.sh
我做到了。但结果相同
"mkdir /home/samitha/log" 也许?
脚本中一个明显的问题是您没有提供post.php
的绝对路径
对于与cron
相关的各种问题,另请参阅***.com/questions/22743548/cronjob-not-running
【参考方案1】:
TL;DR:在 crontab 中的脚本之前以及该脚本调用的任何脚本中插入“bash”。
我有一个解决办法。以前的答案都不适合我。我有两台运行 Kubuntu(更新到内核 v5.8)的华硕笔记本电脑,配置几乎相同。我不知道为什么一个有问题而另一个没有。但是,经过 2 天的实验,我找到了解决方法。希望比我更有知识的人能找到原因。
Cron 使用 sh 而不是 bash。我尝试在 crontab 中的命令上方添加 SHELL=/bin/bash 并定义 PATH ,但没有效果。我所有的脚本在开头都有 #!/bin/bash shebang,也没有任何效果。我的脚本(及其目录)权限为 777。脚本不会为 cron 或用户运行,无论我在文件上尝试了何种用户:组组合。使用完整路径名是 cron 并且在脚本内部没有与使用环境变量不同的效果。
我的解决方法是在 crontab 中的脚本文件名之前插入“bash”。例如:
00 01 * * * bash $BASH_SCRIPTS/backup_os.sh
(是的,cron 使用我在 /etc/environment 中定义的环境变量没有问题。)此外,在 cron 中,当一个脚本运行另一个脚本时,第二个脚本将获得“权限被拒绝”,除非该脚本被修改为在第二个脚本的文件名之前有“bash”,或者如果这适用于您的脚本,则使用“source”。
【讨论】:
【参考方案2】:您也可以尝试以下解决方案:
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
【讨论】:
bash: /etc/init.d/crond: 没有这样的文件或目录 你的服务器是什么? ubuntu? 它在没有 /etc/init.d/crond 起始行的情况下工作。谢谢 我更新了答案..你可以使用 /etc/init.d/cron start for ubutnu 不客气..您的 cron 服务已启动。这就是为什么解决方案没有这条线的原因......我也更新了答案:)【参考方案3】: 文件必须是可执行的(@see chmod) 所有父目录都必须有执行标志(@see chmod) 如果 crontab 由不同的用户(即不是所有者)运行,则该用户可能没有执行权限。 (@see chown)【讨论】:
【参考方案4】:问题可能是您的用户没有执行文件的权限。
首先你为你的脚本设置执行标志
chmod +x /home/samitha/bash.sh
然后你应该检查 php 文件的权限
ls -lah /var/www/Controller
如果您的用户组和用户名均未显示,则您必须以超级用户权限运行脚本或更改其权限。
第一种方法是输入您的条目
sudo crontab -e
或者第二个是(我不建议这样做,因为每个人都可以通过调用您的站点来执行脚本)
chmod a+x /var/www/Controller/post.php
【讨论】:
【参考方案5】:执行该 cron 的用户(执行 cron -e 的用户)没有执行该脚本的适当权限。即:要么脚本缺少执行标志,要么由于它的某些祖先目录缺少执行标志而无法访问它。
【讨论】:
以上是关于使用 bash.sh 拒绝运行 cron 的权限的主要内容,如果未能解决你的问题,请参考以下文章