簡體   English   中英

cron 腳本未在 Raspberry Pi 上執行

[英]cron script not executing on Raspberry Pi

我不是 linux 專家,我有一個無法解決的問題。 如果很明顯,我很抱歉。 我正在嘗試在樹莓派的 cron 表中執行 bash 腳本,但我無法讓它工作。 這是我要執行的示例腳本:

#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

plouf=$( ps -aux | grep reviews | wc -l)
if [[ "$plouf" == 1 ]] ;
then
    echo "plouf" >> /home/pi/Documents/french_pain/crontest.txt
fi

如果沒有運行名稱為 review 的程序,我在 cron 中的腳本包括啟動一個腳本。 為了測試,我只是將“plouf”附加到文件中。 我數了一下ps -aux | grep reviews | wc -l ps -aux | grep reviews | wc -l ps -aux | grep reviews | wc -l ,如果只有一行我在文件中執行 append "plouf"。 這是我的 crontab:

crontab -l


SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
* * * * * sudo /home/pi/Documents/french_pain/script2.sh

當我直接在/home/pi/Documents/french_pain/script2.sh ./ script2.sh ,該腳本確實有效:它在文件中添加了一個“plouf”。

我遇到了這個頁面並嘗試了不同的可能性,方法是將我的路徑設置為env給出的路徑,並在 cron 中明確設置 shell。 但仍然無法正常工作。 我做錯了什么?


要回答 Mark Setchell 評論:

raspberrypi:~/Documents/french_pain $ sudo /home/pi/Documents/french_pain/script2.sh
raspberrypi:~/Documents/french_pain $ cat crontest.txt
plouf

並且 cron 正在運行:

raspberrypi:~/Documents/french_pain $ pgrep cron
353

我設法做簡單的工作,比如

* * * * * /bin/echo "cron works" >> /tmp/file

我嘗試使用命令的直接路徑:

plouf=$( /bin/ps -aux | /bin/grep 'R CMD.*reviews' | usr/bin/wc -l)
if [[ "$plouf" == 1 ]] ;
then
   /bin/echo "plouf" >> /home/pi/Documents/french_pain/crontest.txt
fi

沒有任何運氣。 文件的權限:

-rw-rw-rw- 1 root root 6 juil. 3 23:30 crontest.txt

我嘗試刪除它,也沒有工作。 幫助 !

我猜您以“pi”用戶身份嘗試此操作,然后“sudo”將不起作用,除非您允許 nopasswd:all 或在這種情況下使用能夠處理 Sudo 從標准輸入獲取的密碼的命令。 下面的示例很危險,因為它不再需要任何 sudo 命令的密碼,但是因為您想在 cronie 中使用 sudo:

示例 1:

使用下面的默認 /etc/sudoers 示例將創建一個空文件:

* * * * * sudo ls / > ~/cronietest.txt 

嘗試在底部的 /etc/sudoers 中添加以下內容(obs:不要在 rpi 上使用 pi 作為用戶名):

pi ALL=(ALL) NOPASSWD:ALL

現在再次嘗試在 crontab 中添加以下內容

* * * * * sudo ls / > ~/cronietest.txt 

有用!

示例 2:

這更安全,將其添加到 sudoers 文件中,以便在執行 sudo 時允許“pi”用戶在沒有任何密碼的情況下執行“命令”:

pi ALL= NOPASSWD: /bin/<command>

示例 3:

在不編輯 sudoers 文件的情況下,這是另一個可行的示例(這很危險,因為您的密碼以純文本形式存儲在 cron 文件中)

* * * * * echo "password" | sudo -S ls / > ~/cronietest.txt

我沒有找到 sript 不工作的原因,但由於這篇文章,我終於找到了一種讓它工作的方法:我使用 shell 腳本而不是 bash:文件script3.sh

#!/bin/sh

if ps -ef | grep -v grep | grep 'reviews'; then
      exit 0
else
      echo "plouf" >> /home/pi/Documents/french_pain/crontest.txt
fi

和...一起

* * * * * /home/pi/Documents/french_pain/script3.sh

在我的 crontab 中做了我想要的工作。

暫無
暫無

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

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