簡體   English   中英

從Shell腳本,cron作業啟動服務(新貴)

[英]Starting a service (upstart) from a shell script, from a cron job

我正在嘗試使用cron作業來調用編寫的運行狀況檢查腳本,以檢查編寫的Web應用程序(api)的狀態(URL調用不足以測試全部功能,因此自定義運行狀況檢查)。 healthcheck應用程序具有從Shell腳本(請參見下文)調用的多個終結點,並且此腳本重新啟動了我們正在檢查的更大的Web應用程序。 自然,我遇到了麻煩。

工作原理:1)cron作業每60s運行一次2)healthcheck腳本由cron作業運行3)healthcheck腳本檢查url,如果url返回非200響應,它將停止並啟動服務

可行的方法:1)我可以以ec2-user身份運行腳本(healthcheck.sh)2)我可以以root用戶身份運行腳本3)cron作業會調用腳本並運行,但不會停止/啟動服務(我可以通過觀看/tmp/crontest.txt和ps aux看到它)。

這似乎完全是一個權限問題或一些我不知道的非常基本的Linux問題。


當我以root或ec2-user(/tmp/crontest.txt)身份運行時的日志:

Fri Nov 23 00:28:54 UTC 2012
healthcheck.sh: api not running, restarting service!
api start/running, process 1939 <--- it restarts the service properly!

cron作業運行時的日志:

Fri Nov 23 00:27:01 UTC 2012
healthcheck.sh: api not running, restarting service! <--- no restart

Cron文件(在/etc/cron.d中):

# Call the healthcheck every 60s
* * * * * root /srv/checkout/healthcheck/healthcheck.sh >> /tmp/crontest.txt

Upstart腳本(/etc/init/healthcheck.conf)-用於healthcheck應用程序,該應用程序提供了我們從shell腳本healthcheck.sh調用的端點:

#/etc/init/healthcheck.conf
description "healthcheck"
author "me"

env USER=ec2-user

start on started network
stop on stopping network

script
    # We run our process as a non-root user
    # Upstart user guide, 11.43.2 (http://upstart.ubuntu.com/cookbook/#run-a-job-as-a-different-user)
    exec su -s /bin/sh -c "NODE_ENV=production /usr/local/bin/node /srv/checkout/healthcheck/app.js" $USER
end script

Shell腳本權限:

-rwxr-xr-x 1 ec2-user ec2-user 529 Nov 23 00:16 /srv/checkout/healthcheck/healthcheck.sh

Shell腳本(healthcheck.sh):

#!/bin/bash

API_URL="http://localhost:4567/api"

echo `date`

status_code=`curl -s -o /dev/null -I -w "%{http_code}" $API_URL`
if [ 200 -ne $status_code ]; then
  echo "healthcheck.sh: api not running, restarting service!"
  stop api
  start api
fi

在腳本中添加啟動/停止命令的路徑:

#!/bin/bash

PATH=$PATH:/sbin/

或啟動和停止命令的完整路徑:

/sbin/stop api

您可以使用whereis檢查它們的路徑:

$ whereis start
/sbin/start

另一個問題中找到答案!

基本上,cron作業在有限的環境中運行,因此在“ start [service]”中找不到啟動命令!

修改腳本使其看起來像這樣:

#!/bin/bash
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/opt/usr/bin:/opt/usr/sbin:/usr/local/bin:/usr/local/sbin"
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM