O serviço Ubuntu não está funcionando corretamente

0

Estou tentando criar um serviço para monitorar uma página da web. O script é executado bem quando eu o executo como root

sudo ./myscript.sh.

Mas quando eu o adiciono como um serviço, a parte de e-mail funciona, mas a função sms não. Também nada é registrado.

Meu código de inicialização está abaixo;

cat /etc/init.d/glastowatch
#!/bin/sh
### BEGIN INIT INFO
# Provides:          glastowatch
# Required-Start:    $local_fs $network $named $time $syslog
# Required-Stop:     $local_fs $network $named $time $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Description:       http page monitor
### END INIT INFO

SCRIPT=/usr/local/bin/glastowatch.sh
RUNAS=root

PIDFILE=/var/run/glastowatch.pid
LOGFILE=/var/log/glastowatch.log

start() {
  if [ -f /var/run/$PIDNAME ] && kill -0 $(cat /var/run/$PIDNAME); then
    echo 'Service already running' 2>&1
    return 1
  fi
  echo 'Starting service…' 2>&1
  local CMD="$SCRIPT &> \"$LOGFILE\" & echo \$!"
  su -c "$CMD" $RUNAS > "$PIDFILE"
  echo 'Service started' 2>&1
}

stop() {
  if [ ! -f "$PIDFILE" ] || ! kill -0 $(cat "$PIDFILE"); then
    echo 'Service not running' 2>&1
    return 1
  fi
  echo 'Stopping service…' 2>&1
  kill -15 $(cat "$PIDFILE") && rm -f "$PIDFILE"
  echo 'Service stopped' 2>&1
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
esac

Meu código de script está abaixo;

cat /usr/local/bin/glastowatch.sh
#!/bin/bash

## monitor.sh - Monitors a web page for changes
## sends an email & sms notification if the file change

## script variables
URL="http://glastonbury.seetickets.com/content/extras"
newhtml="/var/tmp/new.html"
oldhtml="/var/tmp/old.html"
newupdate="/var/tmp/updatenew.txt"
oldupdate="/var/tmp/updateold.txt"
logfile="/var/log/glastowatch.log"

## email addresses to send email to
declare -a emails=(
'[email protected]'
'[email protected]'
);

## phone numbers to send sms to
declare -a numbers=(
'xxxxx262050'
);

## message variable
message="Web Page Changed."

## sms system variables
test="false"

## functions
function send_sms {
smstxt="$1"
smstest="$2"
for num in "${numbers[@]}"
do
    php sms.php "${num}" "${smstxt}" "${smstest}"
done
}

function send_email {
mailbody="$1"
mailsubject="$2"
for addy in "${emails[@]}"
do
    echo "$mailbody" | mail -s "$mailsubject" "$addy"
done
}

## main loop
for (( ; ; )); do

    curl -I $URL -Ls | grep "Last-Modified" > $newupdate
    DIFF_OUTPUT1="$(diff $newupdate $oldupdate)"

    if [ "${#DIFF_OUTPUT1}" != "0" ]; then
        curl $URL -L --compressed -s | sed -E \
        -e 's/data-refresh-id="[0-9.]+"/data-refresh-id="0"/' \
        -e 's/serverTime: [0-9]+/serverTime: 0/' \
        -e 's/.*<meta charset="UTF-8" \/>.*/<meta charset="UTF-8" \/>/' > $newhtml
        DIFF_OUTPUT2="$(diff $newhtml $oldhtml)"
        if [ "${#DIFF_OUTPUT2}" != "0" ]; then
            ## build text string for email body
            hash='cat $newupdate'
            text="The following changes have been made to $URL"$'\n'$'\n'"${DIFF_OUTPUT2}"$'\n'$'\n'"$hash"
            send_email "$text" "$message"
            smsmsg="$message"$'\n'$'\n'"$URL"$'\n'$'\n'"$hash"
            send_sms "$smsmsg" "$test" > $Logfile 2>&1
            mv $newhtml $oldhtml 2> $logfile
        fi
        mv $newupdate $oldupdate 2> $logfile
    fi
sleep 30
done

e isso, por sua vez, chama um script php de envio de SMS

cat /usr/local/bin/sms.php
<?php
        // Textlocal account details
        $username = '[email protected]';
        //$password = 'xxxxx'
        $hash = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

        // Configuration Variables
        //$info = '0';
        $test = $argv[3];

        // Message details
        $numbers = array($argv[1]);
        $sender = urlencode('Pavey.Server');
        $message = rawurlencode($argv[2]);

        $numbers = implode(',', $numbers);

        // Prepare data for POST request
        $data = array('username' => $username, 'hash' => $hash, 'numbers' => $numbers, "sender" => $sender, "message" => $message, "test" => $test);

        //Send the POST request with cURL
        $ch = curl_init('http://api.txtlocal.com/send/');
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);
        curl_close($ch);

        // Process your response here
        echo $response;
?>

Como eu disse tudo isso funciona bem se eu apenas chamar o roteiro. Mas eu não recebo um SMS quando iniciado como serviço. Também textlocal não registra um pedido de mensagem. Talvez alguns registros ajudem a identificar o erro. Quando eu executo o script eu vejo uma saída da função SMS, então eu gostaria de registrar isso de alguma forma.

Obrigado chris.

    
por Chris Pavey 10.07.2017 / 15:27

0 respostas