簡體   English   中英

bash.sh 拒絕運行 cron 的權限

[英]Permission denied with bash.sh to run 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

我將如何修復它? 我做錯了什么?

您也可以嘗試以下解決方案:

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

執行該 cron 的用戶(執行 cron -e 的用戶)沒有執行該腳本的適當權限。 也就是說:要么腳本缺少執行標志,要么無法訪問它,因為它的某些祖先目錄缺少執行標志。

問題可能是您的用戶無權執行該文件。

首先你為你的腳本設置執行標志

chmod +x /home/samitha/bash.sh

然后你應該檢查php文件的權限

ls -lah /var/www/Controller

如果您的用戶組和用戶名均未顯示,則必須以超級用戶權限運行腳本或更改其權限。

第一種方法是將您的條目放入

sudo crontab -e

或者第二個是(我不推薦,因為每個人都可以通過調用您的站點來執行腳本)

 chmod a+x /var/www/Controller/post.php
  • 文件必須是可執行的(@see chmod)
  • 所有父目錄都必須有執行標志(@see chmod)
  • 如果 crontab 由不同的用戶(即不是所有者)運行,則該用戶可能沒有執行權限。 (@see chown)

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” " 在第二個腳本的文件名之前,或者如果這適用於您的腳本,則使用“源”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM