Pregunta Problema al empujar el archivo de linux a windows con smbclient


Tengo un archivo ubicado en mi linux box generado por un script de python, el archivo se coloca dentro del directorio / root /

Mi script bash se ve así:

#!/bin/bash
# Run the HR Data feed
cd /root/hr-feed
# the file created here will land one directory above the scripts in /root/
python main.py     

# Transfer the file to the server
cd /root/
smbclient \\\\[SERVER]\\[SHARE] --workgroup=[WRKGRP] --user=[USR] [PASS] -c 'put HRDataFeed.txt'

Todo funciona como se desea hasta la última línea. Debe estar ejecutándose con un error (aunque no estoy muy seguro de cómo descubrir cuál es el error).

Este trabajo se ejecuta desde el crontab. Lo cual, como entiendo, se ejecuta en un entorno ligeramente diferente al de root (o al menos parece con la forma en que se comporta).

Si ejecuto el script directamente (no desde el crontab), se ejecuta sin problemas y el archivo se transfiere al cuadro del servidor de Windows de destino. Supongo que tal vez necesite proporcionar la ruta completa al archivo HRDataFeed.txt como parte del comando put; Sin embargo, parece que no puedo entenderlo.

smbclient .... -c "put /root/HRDataFeed.txt"

resulta en un error que el archivo /root/HRDataFeed.txt no pudo ser encontrado.

Cualquier aporte es muy apreciado.

EDITAR

Intenté actualizar mi crontab para leer (por el bien de las pruebas lo tenía funcionando cada minuto)

          • / root / hrdatafeed> last_run.txt

Sin embargo, nada parecía aterrizar en el archivo.

Intentaré simplemente agregar una tubería directamente al comando SMBClient.


2


origen


¿Estás usando SELinux? Si es así, puede desactivarlo temporalmente con setenforce 0 y luego volver a habilitarlo con setenforce 1. Por cierto ausearch --start recent te dirá las negativas recientes de SELinux. Con respecto al registro de errores, también puede redireccionar el stdout y stderr de smbclient a algunos archivos. - Cristian Ciupitu
Gracias @CristianCiupitu Estoy en el servidor de Ubuntu, creo que es Hardy. Intenté redirigir el resultado a algunos archivos, pero no creo que lo haya hecho correctamente. Actualizaré mi pregunta. - Mike McMahon
Debes redirigir ambos stdout y stderr y tal vez deberías haber usado una ruta absoluta para el "registro". Tratar /root/hrdatafeed >/root/last_run.txt 2>&1 o /root/hrdatafeed >/root/stdout.txt 2>/root/stderr.txt. - Cristian Ciupitu
@CristianCiupitu gracias por toda tu ayuda, debes hacer que la tuya sea una respuesta. ¡Me ayudó a diagnosticar y ponerlo en funcionamiento! - Mike McMahon
No hay necesidad; lo importante es que hayas resuelto tu problema. Por cierto En SF, ¿cuándo se debe enviar una respuesta como comentario y en lugar de una respuesta (y viceversa)?. - Cristian Ciupitu


Respuestas:


Cron intenta enviar un correo (usando /usr/bin/sendmail) cuando falla un comando: esa es la única manera que conozco de obtener el resultado real del script (se puede instalar sSMTP para hacer que esto funcione con bastante facilidad). La principal diferencia en el entorno cron es usualmente $PATH, así que intente establecer un PATH en el crontab que incluye el directorio donde smbclient es.


4





Terminé reescribiendo ligeramente el guión para leer así:

#!/bin/bash
# Run the HR Data feed
cd /root/hr-feed
python main.py

# Transfer the file to the server
cd /root/
/usr/bin/smbclient \\\\[SERVER]\\HRDataFeed --workgroup=[WRKGRP] --user=[USR] [PASS] -c 'put HRDataFeed.txt'

Cambié mi crontab a esto:

          • sh /root/hrdatafeed.sh> / root / last_run> 2> & 1

Finalmente fue capaz de obtener algunos mensajes significativos en el último archivo de ejecución. Aunque no hubo errores, supongo que fue porque hice el cambio para establecer la ruta completa al comando smbclient.

Gracias por toda la ayuda para que esto funcione.

Ahora, por supuesto, actualizaré la pestaña cron para que se ejecute con un poco menos de frecuencia;)


1