Bash脚本可以工作,但不能从crontab执行

时间:2014-06-10 16:41:01

标签: linux bash shell cron crontab

我是linux新手,下面的脚本只是我的问题的一个例子:

我有一个脚本在执行时按预期工作但是当我将其设置为通过crontab运行时,它没有按预期工作,因为它没有将文件内容读入变量。

我有一个文件' test.txt'哪个有' abc'在里面。我的脚本将文本放入变量' var'然后我将它回显给日志文件:

var=$(</home/pi/MyScripts/test.txt)
echo "$var" >/home/pi/MyScripts/log.log

当我执行它并且它回显到日志文件中时它完全正常,但是当我通过crontab设置它时不是这样:

* * * * * /home/pi/MyScripts/test.sh

cron作业运行,它向我发送了以下错误消息:

/bin/sh: 1: /home/pi/MyScripts/test.sh: Permission denied.

但我已经给了777权限:

-rwxrwxrwx 1 pi pi   25 Jun 10 15:31 test.txt
-rwxrwxrwx 1 pi pi   77 Jun 10 15:34 test.sh

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

当您使用其他shell运行脚本时会发生这种情况。它与/bin/shdash的系统特别相关:

$ cat myscript 
echo "$(< file)"

$ bash myscript
hello world

$ sh myscript

$ 

要修复它,请在脚本的第一行添加#!/bin/bash

答案 1 :(得分:1)

其他人提供了答案,但我会从你的错误信息中给你一个很大的线索;强调我的:

  

/ bin / sh :1:/home/pi/MyScripts/test.sh:权限被拒绝。

请注意cron作业如何尝试使用/bin/sh来运行脚本。通过总是在脚本顶部指示要使用哪个shell来解决这个问题。

#!/bin/bash
var=$(</home/pi/MyScripts/test.txt)
echo "$var" >/home/pi/MyScripts/log.log

如果您的脚本使用的是bash,那么您必须以某种方式明确设置/bin/bash

另外,关于权限,你这样说:

  

但我已经给了777权限:

首先,777权限是一个巨大的安全风险。如果你这样做,就意味着系统中的任何人或任何东西都可以读,写和执行文件。不要那样做。对于cron作业,对文件需要7权限的唯一实体是运行该文件的crontab的所有者。

这意味着如果这是您的crontab,只需将权限更改为755即可让其他人阅读&amp;执行但不写。或者更好的是将其更改为700,因此只有您 - 作为文件的所有者 - 才能对文件执行任何操作。但如果您希望保持系统的安全,稳定和安全,请避免777权限。清醒。

答案 2 :(得分:0)

您有两种选择。在文件的第一行,告诉您要解释脚本的程序

#!/bin/bash
...more code...

或者在您的crontab中,告诉您要解释脚本的程序

* * * * * bash /home/pi/MyScripts/test.sh

在此选项中,您不需要使脚本可执行