首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SH脚本在控制台中工作,但在Cronjob中不起作用

SH脚本在控制台中工作,但在Cronjob中不起作用
EN

Stack Overflow用户
提问于 2018-01-10 22:12:34
回答 1查看 866关注 0票数 0

我和Debian有一个树莓派。我也在运行Domoticz。Domoticz有时会停止,我必须重新启动服务。我使用这个脚本(domoticz_state_checker.sh):

代码语言:javascript
复制
#!/bin/bash
echo 'Checking if Domoticz is running.'
DomoticzState=`sudo service domoticz.sh status`

#echo $DomoticzState

if [[ $DomoticzState == *"active (running)"* ]] 
then
    echo 'Domoticz is running. Nothing to do.'
elif [[ $DomoticzState == *"domoticz is not running ... failed!"* ]] 
then
    echo 'Domoticz is not running. Restarting Domoticz...'
    sudo service domoticz.sh restart
    echo 'Domoticz restarted.'
elif [[ $DomoticzState == *"active (exited)"* ]] 
then
    echo 'Domoticz active (exited). Restarting Domoticz...'
    sudo service domoticz.sh restart
    echo 'Domoticz restarted.'          
elif [[ $DomoticzState == *"inactive (dead)"* ]] 
then
    echo 'Domoticz inactive (dead). Restarting Domoticz...'
    sudo service domoticz.sh restart
    echo 'Domoticz restarted.'                      
fi

当我以用户Pi的身份运行该脚本时,该脚本可以正常工作。我这样运行它

代码语言:javascript
复制
pi@raspberrypi:~/domoticz/scripts $ /home/pi/domoticz/scripts/domoticz_state_checker.sh

我使用crontab -e创建了以下命令,以便将其作为cronjob运行

代码语言:javascript
复制
*/5 * * * * pi /home/pi/domoticz/scripts/domoticz_state_checker.sh >> /home/pi/domoticz/scripts/domoticz_state_checker.log 2>&1

在我的cron日志中,我看到正在执行的作业:

代码语言:javascript
复制
Jan 10 14:55:01 raspberrypi CRON[23498]: (pi) CMD (pi /home/pi/domoticz/scripts/domoticz_state_checker.sh >> /home/pi/domoticz/scripts/domoticz_state_checker.log 2>&1)

但是该脚本不会重新启动我的Domoticz服务。检查已经完成,但是我的if和elif语句出现错误。我在我的domoticz_state_checker.log中看到以下错误:

代码语言:javascript
复制
Checking if Domoticz is running.
/home/pi/domoticz/scripts/domoticz_state_checker.sh: 7: /home/pi/domoticz/scripts/domoticz_state_checker.sh: [[: not found
/home/pi/domoticz/scripts/domoticz_state_checker.sh: 10: /home/pi/domoticz/scripts/domoticz_state_checker.sh: [[: not found
/home/pi/domoticz/scripts/domoticz_state_checker.sh: 15: /home/pi/domoticz/scripts/domoticz_state_checker.sh: [[: not found
/home/pi/domoticz/scripts/domoticz_state_checker.sh: 20: /home/pi/domoticz/scripts/domoticz_state_checker.sh: [[: not found

当我用suo执行的时候

代码语言:javascript
复制
pi@raspberrypi:~/domoticz/scripts $ sudo /home/pi/domoticz/scripts/domoticz_state_checker.sh

我得到的结果与我通过cron运行脚本时的结果相同

你知道这里出了什么问题吗?我的cronjob在哪个帐户下执行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-11 16:05:28

我认为要在cronjob中作为特定用户运行shell脚本,您应该在crontab中使用-u选项。

crontab -u pi -e

并在位置文件前添加命令bash/bin/bash

#<timing> <user> <command> */5 * * * * bash /home/pi/domoticz/scripts/domoticz_state_checker.sh >> /home/pi/domoticz/scripts/domoticz_state_checker.log 2>&1

您可以从所有用户的spool where文件中找到crontab

cat /var/spool/cron/crontabs/<user>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48189316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档