![](/img/trans.png)
[英]Bash script runs manually in terminal but is not executed from crontab
[英]Bash Script works but not in when executed from 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
有任何想法吗?
当您使用不同的shell运行脚本时会发生这种情况。 它对于/bin/sh
是dash
系统特别相关:
$ cat myscript
echo "$(< file)"
$ bash myscript
hello world
$ sh myscript
$
要修复它,请添加#!/bin/bash
作为脚本中的第一行。
其他人提供了答案,但我会从你的错误信息中给你一个很大的线索; 强调我的:
/ 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
,允许其他人读取和执行但不能写入。 或者更好的是将其更改为700
因此只有您 - 作为文件的所有者 - 才能对文件执行任何操作。 但如果您想保持系统安全,稳定和理智,请避免使用777
权限。
你有两个选择。 在文件的第一行,告诉您要解释脚本的程序
#!/bin/bash
...more code...
或者在您的crontab中,告诉您要解释脚本的程序
* * * * * bash /home/pi/MyScripts/test.sh
在此选项中,您不需要使脚本可执行
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.