我是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
有什么想法吗?
答案 0 :(得分:2)
当您使用其他shell运行脚本时会发生这种情况。它与/bin/sh
为dash
的系统特别相关:
$ 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
在此选项中,您不需要使脚本可执行