为什么通过Crontab启动的脚本的行为有所不同?

时间:2019-11-13 13:14:46

标签: bash cron

我在UbuntuServer(VM)中有.sh脚本:

response=$(curl -H 'Accept: application/vnd.twitchtv.v5+json' -H 'Authorization: OAuth 9f65dd6onr07vhpdqblbiix5rl0tch' -X GET 'https://api.twitch.tv/kraken/streams/127060528' | jq -r '.stream');
now=$(date +"%Y-%m-%d %T");
echo "$now" >> log.txt;
echo "$response" >> log.txt;
if [[ "$response" == "null" ]]
then
  echo "ZERO"
else
  streamlink -o "dump/stream_$now.mp3" twitch.tv/mahetirecords/clip/FreezingEncouragingCougarSuperVinlin audio
  echo "STREAM"
fi

当我通过bash运行脚本时,会触发 THEN 方式。 当我通过crontab运行脚本时,会触发 ELSE 方式。 为什么?

Crontab -e:

* * * * * /home/chesterlife/twitch-interceptor/script.sh

如果流离线,则“ $ response”返回。这是空文本,因为var=""; if [ "$var" == "$response" ]; then echo "true"; else echo "false"; fi返回 false

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

默认情况下,crontab使用sh shell执行。您可以使用以下链接中的信息将其更改为bash

https://unix.stackexchange.com/questions/94456/how-to-change-cron-shell-sh-to-bash

也请阅读有关the difference between [ and [[ in Bash

的堆栈溢出问题

虽然[是POSIX,但是[[仅受包括bash在内的某些shell支持。

答案 1 :(得分:0)

您在脚本开头缺少一个shebang,例如:

#!/usr/bin/env bash

此外,您还应该将当前用户的路径(通过echo $PATH获得)添加到脚本中,以便在与用户相同的健全环境中运行。