Prueba cambiar las variables x, y... por nombres como las otras. Otra posibilidad es que el comando echo deba ponerse comillas " a sus salidas
echo "el porcetanje de uso del cpu es: $x %" >> /home/gechdell/Documentos/scripts/log.txt
amigos que tal en esta ocasión les pido de su ayuda por que estoy da y da de vueltas y no consigo solucionarlo
tengo un script que lo unico que hace es monitorizar el uso del CPU es decir para ver que tanto se esta usando.
el script es el siguiente
ahora si lo corro de manera manual es decir, con ./nombre este se ejecuta correctamente me crea mi archivo log.txt y me da la siguiente salidaCódigo PHP:
#!/bin/bash
fecha=$(date +%d-%m-%Y*%T)
factor=10
base=150
#ejecuto top de manera estatica y con grep separo la lina de uso de %cpu y con AWK aislo unicamente el uso del cpu
x=$(top -b -n 1 | grep %Cpu | awk '{usage=$2} END {print usage}')
echo el porcetanje de uso del cpu es: $x % >> /home/gechdell/Documentos/scripts/log.txt
#multiplico el valor de %cpu por 10 para convertir un decimal a entero, pero aun conserva el .0
y=$(echo "$x*$factor"|bc)
echo multiplicado es $y % >> /home/gechdell/Documentos/scripts/log.txt
#quito el .0 para quedarme con un numero sin punto decimal
z=${y/.*/}
echo sin decimales es $z >> /home/gechdell/Documentos/scripts/log.txt
echo este $z es mayor que $base >> /home/gechdell/Documentos/scripts/log.txt
#comparo el uso de CPU ya convertido a entero y sin punto decimal con mi base para saber si el uso del cpu es alto o no
if [ $z -gt $base ];
then
echo el uso del cpu es alto $x % a las $fecha >> /home/gechdell/Documentos/scripts/log.txt
else
echo el uso del cpu es normal $x % a las $fecha >> /home/gechdell/Documentos/scripts/log.txt
fi
ahora el detalle viene cuando agrego ese script a cron.el porcetanje de uso del cpu es: 15.7 %
multiplicado es 157.0
sin decimales es 157
este 157 es mayor que 150
el uso del cpu es alto 15.7 % a las 30-11-2018*15:23:33
cron se ejecuta y lanza el script sin problema, perooooooo resulta que se pierden los valores de las variables¡¡¡¡¡¡ solo se conserva el valor de la variable x¡¡¡¡¡¡¡ y por consiguiente me arroja esto en el archivo log.txt
por lo mismo que se pierden los valores de las variables, al momento de hacer el if, este no hace la comparación correctamente, pues no tiene los 2 valores para hacerlo.el porcetanje de uso del cpu es: 26,5 %
multiplicado es
sin decimales es
este es mayor que 150
el uso del cpu es normal 26,5 % a las 30-11-2018*15:24:01
he estado buscando mucho en internet y no encuentro nada al respecto, y mi pregunta es la misma.. por que al correrlo manual si respeta los valores de las variables, y al correcto en automatico los valores se pierden???
mi archivo contrab es el siguiente
Código:gechdell@linux-b1aw:~/Documentos/scripts> crontab -l # DO NOT EDIT THIS FILE - edit the master and reinstall. # (/tmp/crontab.uPEWbH installed on Fri Nov 30 15:29:57 2018) # (Cronie version 4.2) SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin @hourly /home/gechdell/bin/copia.sh * * * * * /home/gechdell/Documentos/scripts/cpu.sh
ojala puedan ayudarme y orientarme con este pequeño problema.
SALUDOS
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
Última edición por gechdell; 05-dic-2018 a las 18:33 Razón: Cambiar etiqueta para lectura (SOLUCIONADO)
estoy buscando a mi media naranja, pero mientras me hecho unas mandarinas¡¡¡¡¡¡¡¡¡¡¡¡
Prueba cambiar las variables x, y... por nombres como las otras. Otra posibilidad es que el comando echo deba ponerse comillas " a sus salidas
echo "el porcetanje de uso del cpu es: $x %" >> /home/gechdell/Documentos/scripts/log.txt
Última edición por DiabloRojo; 01-dic-2018 a las 10:26
NORMAS A CUMPLIR EN LOS FOROS (Lectura obligatoria) Lo siento, no contesto privados sobre problemas con GNU/Linux.
Síguenos en TWITTER y en FACEBOOK
Código:Buscador de Alojamiento Alojamiento Otros paquetes: de imágenes: de ficheros: buscadores: Search TinyPic Ifile Wuala Simple y Facil Webpinstant Paste Suse SendSpace TextSnip Cl1p
Igual tiene que ver con el usuario que se lanza el script de cron, si no pones nada creo que como root, prueba con otro usuario.
Salu2
Hola!
Suponemos que el script tiene permisos de ejecución (chmod +x)
Yo he tenido problemas, porque al ejecutar un script en cron necesita las rutas absolutas a los archivos, pero veo que en tu caso ya está así.
Yo en cron lo tengo de esta manera:
*/5 * * * * /bin/bash /home/vhck/scripts/script.sh
pero supongo que añadiendo el path tal como lo tienes tu, serviría igual...
no se me ocurre qué podría ser...
→ Guía básica de openSUSE Leap para recién llegados a GNU/Linux.
→ Mi blog sobre openSUSE, GNU/Linux, software libre ...y de todo un poco: Victorhck in the free world
→ Me puedes seguir en: Mastodon - diaspora* - PixelFed
amigo intento lo que me indicas pero aun asi no se respeta los valores de las variables
ahora tambien no solo es a la hora de imprimir en el archivo, sino que por ejemplo en el IF tampoco se respeta la condición pues las variables pierden su valor.
Lo extraño es que por que la primera variable es decir la $x si la respeta pero las siguientes nomas no
ya lo lance como root y como usuario normal y nada hace lo mismoIgual tiene que ver con el usuario que se lanza el script de cron, si no pones nada creo que como root, prueba con otro usuario.
Salu2
si el script tiene permisos de ejecucionHola!
Suponemos que el script tiene permisos de ejecución (chmod +x)
Yo he tenido problemas, porque al ejecutar un script en cron necesita las rutas absolutas a los archivos, pero veo que en tu caso ya está así.
Yo en cron lo tengo de esta manera:
*/5 * * * * /bin/bash /home/vhck/scripts/script.sh
pero supongo que añadiendo el path tal como lo tienes tu, serviría igual...
no se me ocurre qué podría ser...
pero por que cuando se lanza de manera manual todo correcto, pero cuando lo hace cron nomas no funciona?????
estoy buscando a mi media naranja, pero mientras me hecho unas mandarinas¡¡¡¡¡¡¡¡¡¡¡¡
Hola estimado, la verdad que hace mucho que no hago nada de scripts, pero recuerdo que algo raro me ocurrió con un script que le asigné a cron, lo resolví leyendo el man, no quiero mentir pero creo en el mismo daba un ejemplo de que había que declarar las variables desde el script de cron, el espacio de variables del mismo no es igual que el de bash, así cuando se lanza la tarea no perdía las variables.
Saludos.
no me hagas mucho caso, pero creo que te falta algo así en el script de cron:
segun esta paguinaCódigo:BASH_ENV="/root/.bashrc"
aunque en el ejemplo es para el usuario root y el archivo "~/.bashrc" pero creo que en opensuse se utiliza "/etc/profile". Pero no estoy muy seguro.
Saludos.
__________________________________________________
Mi Blog:
http://elblogdedarkspark.blogspot.mx/
Canales de Youtube:
http://www.youtube.com/user/DarkSpark2099
http://www.youtube.com/user/defton En des-uso
Hola estimado, creo que pude replicar el problema, al intentar ejecutar tu escript en la consola me arrojaba la misma salida en el log que la que te arroja desde cron.
Ejecuté las instrucciones y variables y encontré la discrepancia en el comando bc y la salida del comando top.
En mi pc tengo todo configurado para usar español, la salida del comando top te arroja un numero decimal utilizando coma "," y el comando bc no reconoce dicho formato de números decimales, espera en su lugar un punto "."
Esto te arroja el primer error en la linea y=$(echo "$x*$factor"|bc) y eso arrastra los problemas más abajo.
La solución que se me ocurrió fue formatear la salida de la variable x y cambiar coma por punto, eso terminó el comando correctamente.
Lo que se me ocurre que puede estar pasando es una discrepancia de los locale utilizados, tu usuario tiene español y cron utiliza el de sistema (ingles), o a la inversa, eso es lo que cambia la salida del comando top para que use punto o coma, para expresar los valores decimales.
Adjunto el script modificado para que lo pruebes.
Saludos.Código:#!/bin/bash fecha=$(date +%d-%m-%Y*%T) factor=10 base=150 #ejecuto top de manera estatica y con grep separo la lina de uso de %cpu y con AWK aislo unicamente el uso del cpu q=$(top -b -n 1 | grep %Cpu | awk '{usage=$2} END {print usage}') #cambiamos la coma por el punto para que sea leido correctamente por el comando bc x=`echo $q | sed 's/,/./g'` echo el porcetanje de uso del cpu es: $x % >> /home/gechdell/Documentos/scripts/log.txt #multiplico el valor de %cpu por 10 para convertir un decimal a entero, pero aun conserva el .0 y=$(echo "$x*$factor"|bc) echo multiplicado es $y % >> /home/gechdell/Documentos/scripts/log.txt #quito el .0 para quedarme con un numero sin punto decimal z=${y/.*/} echo sin decimales es $z >> /home/gechdell/Documentos/scripts/log.txt echo este $z es mayor que $base >> /home/gechdell/Documentos/scripts/log.txt #comparo el uso de CPU ya convertido a entero y sin punto decimal con mi base para saber si el uso del cpu es alto o no if [ $z -gt $base ]; then echo el uso del cpu es alto $x % a las $fecha >> /home/gechdell/Documentos/scripts/log.txt else echo el uso del cpu es normal $x % a las $fecha >> /home/gechdell/Documentos/scripts/log.txt fi
There are currently 1 users browsing this thread. (0 members and 1 guests)
Marcadores