如何在这里运行带有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
我将如何修复它?我做错了什么?
答案 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)
答案 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”。