1 votos

El script bash de Sendmail invocado por cron no puede leer desde stdin

Trato de escribir un pequeño script que borra de la dirección de nullmailer. Nullmailer tiene una opción "allmailfrom" usted puede poner una dirección postal en /etc/nullmailer/allmailfrom y todos los correos enviados a tener esta dirección como "Camino de Retorno", pero es el valor de para el envío de un programa, como pi@raspberrypi

Así que he tratado de crear un pequeño script para volver a escribir la dirección. Básicamente mover sendmail sendmail-bin y el nombre de la secuencia de comandos creado sendmail. Funciona con el comando "mail", la dirección se vuelve a escribir como se debe. Sin embargo, con el cron no funciona. STDIN está vacía y por lo tanto la salida de cron no se recibe vía E-Mail. Syslogs escribe

 /usr/sbin/sendmail: line 11: /dev/stdin: permission denied

Aquí la secuencia de comandos.

#!/bin/bash
#########################################
#Beginn change here
export NULLMAILER_USER=user
export NULLMAILER_HOST=somedomain.com
#Ende change here
#############################################

export NULLMAILER_FLAGS=ft

stdin=$(</dev/stdin)

optPosition=0 #defaultvalue when not found

while getopts ":f:" from; do
    case $from in
        f) optPosition=$OPTIND
           break
           ;;
    esac
done


arguments=($@)

if (($optPosition != 0)); then #-f Option was used
 arguments[(($optPosition-2))]=$NULLMAILER_USER@$NULLMAILER_HOST
 set -- "${arguments[@]}"
fi



echo "$stdin" | /usr/sbin/sendmail-bin "$@"   

El NULLMAILER_USER con NULLMAILER_HOST y NULLMAILER_FLAGS=f digo nullmailer el uso de este como el de dirección. Que parte no funciona, consulte http://manpages.ubuntu.com/manpages/trusty/man1/nullmailer-inject.1.html

En el crontab es justo

*/1 * * * * echo test 

Cuando orignal sendmail de nullmailer está presente, entonces "prueba" en el cuerpo del correo, como debe ser. Así que ¿por qué no puede leer este script de bash desde stdin?

0voto

Hannes Puntos 6

reemplazar línea

 stdin=$(</dev/stdin)
 

con

 stdin=`cat`
 

y funciona. La respuesta se inspiró en https://stackoverflow.com/questions/212965/how-to-read-mutliline-input-from-stdin-into-variable-and-how-to-print-one-out-in-in-

No sé por qué esto hace tanta diferencia, importante que funciona.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: