繁体   English   中英

Bash脚本可以工作,但不能从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/shdash系统特别相关:

$ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM