Não é possível executar o script expect através do cron, mesmo com as permissões definidas para 777

0

Eu criei um script de espera que parece não rodar quando chamado pelo cron. Eu incluí o caminho completo no cron ao chamá-lo da seguinte forma.

  *   *   *   *   *     /usr/local/sbin/checkForRemoteTasks >/tmp/checkForRemoteTasks.output

Isso chama o script checkForRemoteTasks e exporta os resultados para /tmp/checkForRemoteTasks.output. O conteúdo do script é o seguinte:

#!/usr/bin/expect -f
set timeout -1
set env(TERM) vt100

if [file exists "/usr/local/sbin/remoteTasks/restartMySQL"] {
    ## STOP APACHE FIRST
    spawn apache2ctl stop
    expect "#"
    spawn service mysql restart
    expect "#"
    spawn rm /usr/local/sbin/remoteTasks/restartMySQL
    expect "#"
    spawn apache2ctl start
    expect "#"
}
if [file exists "/usr/local/sbin/remoteTasks/restartApache"] {
    spawn apache2ctl graceful
    expect "#"
    spawn rm /usr/local/sbin/remoteTasks/restartApache
    expect "#"
}

Eu tenho um script no meu servidor de teste que envia um arquivo para o arquivo / usr / local / sbin / remoteTasks / restartMySQL. O arquivo contém um caractere. O script expect executado pelo cron (no meu servidor de produção) deve verificar o arquivo restartMySQL e, se encontrar o arquivo, ele deve gerar os comandos apropriados para parar o apache, reiniciar o MySQL e, em seguida, reiniciar o apache. Ele funciona quando eu o executo manualmente, mas não quando corri através do cron. Qualquer ajuda seria apreciada.

Aqui está a saída de /tmp/checkForRemoteTasks.output:

spawn apache2ctl stop
    
por CEOofOGN 16.08.2014 / 02:06

1 resposta

0

Algum desses comandos é realmente interativo? Se não, use apenas exec

if {[file exists "/usr/local/sbin/remoteTasks/restartMySQL"]} {
    ## STOP APACHE FIRST
    exec apache2ctl stop
    exec service mysql restart
    file delete /usr/local/sbin/remoteTasks/restartMySQL
    exec apache2ctl start
}
if {[file exists "/usr/local/sbin/remoteTasks/restartApache"]} {
    exec apache2ctl graceful
    file delete /usr/local/sbin/remoteTasks/restartApache
}

Mas se você está fazendo isso, você pode ficar bem com o shell:

#!/bin/sh
if [[ -f /usr/local/sbin/remoteTasks/restartMySQL ]]; then
    ## STOP APACHE FIRST
    apache2ctl stop
    service mysql restart
    rm /usr/local/sbin/remoteTasks/restartMySQL
    apache2ctl start
fi
if [[ -f /usr/local/sbin/remoteTasks/restartApache ]]; then
    apache2ctl graceful
    rm /usr/local/sbin/remoteTasks/restartApache
fi
    
por glenn jackman 16.08.2014 / 02:53