bash脚本工作,但不是从crontab中执行时(Bash Script works but not

2019-10-20 07:03发布

我是新来的Linux和下面的脚本只是我的问题的例子:

我有一个脚本但是当我执行它,当我将它设置可以通过crontab预期它不工作运行,因为它不读取文件内容到变量如预期其工作。

我有一个文件“的test.txt”其中有“ABC”在里面。 我的脚本把文成变量“变种”,然后我赞同它的日志文件:

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

有任何想法吗?

Answer 1:

当你运行一个不同的shell脚本会出现这种情况。 这对系统特别是有关地方/bin/shdash

$ cat myscript 
echo "$(< file)"

$ bash myscript
hello world

$ sh myscript

$ 

为了解决这个问题,添加#!/bin/bash在脚本的第一行。



Answer 2:

其他人提供的答案,但我会给你从你的错误消息,一个大的线索; 重点煤矿:

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

注意定时任务是如何试图用/bin/sh运行该脚本。 这是由一直表示要在你这样的脚本的顶部使用的外壳来解决。

#!/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 ,让别人看和执行,但不写。 或者,也许更好,但将其更改为700所以只有您作为所有者的文件,可以做任何事情来的文件。 但要避免777 ,如果你想保持你的系统安全,稳定和理智的权限。



Answer 3:

你有两个选择。 在你的文件的第一行,告诉你要解释脚本程序是什么

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

或者在你的crontab,告诉你要解释脚本程序是什么

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

在这个选项中,你并不需要使脚本可执行



文章来源: Bash Script works but not in when executed from crontab