Instalar crontab usando el script bash

11

He creado un script para instalar dos scripts en el crontab.

#!/bin/bash

 sudo crontab -l > mycron
 #echo new cron into cron file

 echo "*/05 * * * * bash /mnt/md0/capture/delete_old_pcap.sh" >> mycron #schedule the delete script
 echo "*/12 * * * * bash  /mnt/md0/capture/merge_pcap.sh" >> mycron     #schedule the merge script

#install new cron file
 crontab mycron
rm mycron

El script se ejecuta y agrega las dos líneas al crontab. Pero si ejecuto el script nuevamente, agrega esas líneas nuevamente, por lo tanto tendré cuatro líneas que dicen lo mismo. Quiero que el script de instalación se ejecute de tal manera que las líneas insertadas en el crontab no se repitan. Cómo puedo hacer eso

Jishnu U Nair
fuente
No entiendo cuál es tu objetivo? ¿por qué lo escribiste en primer lugar ?, edita y agrega información en tu publicación original. tks
X Tian
askubuntu.com/questions/58575/add-lines-to-cron-from-script
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Respuestas:

18

Recomendaría usar /etc/cron.dmás crontab.

Puede colocar archivos en los /etc/cron.dque se comportan como entradas crontab. Aunque el formato es ligeramente diferente.

Por ejemplo
/etc/cron.d/pcap:

*/05 * * * * root bash /mnt/md0/capture/delete_old_pcap.sh
*/12 * * * * root bash  /mnt/md0/capture/merge_pcap.sh

La diferencia en el formato es agregar al usuario para ejecutar el trabajo como después de la especificación de tiempo.

Ahora puede simplemente verificar si el archivo existe, y si lo sobrescribe, no importa.

 

Tenga en cuenta que es posible que su cron daemon no tenga /etc/cron.d. No sé qué demonios cron lo tienen, pero vixie cron es el demonio cron estándar en Linux, y lo hace.

Patricio
fuente
3

En su lugar, podría declarar una función:

add() {
  grep -Fq "$1" mycron || echo "$1" >> mycron
}

e invocarlo diciendo:

add "*/05 * * * * bash /mnt/md0/capture/delete_old_pcap.sh"

Esto agregaría la línea solo si no existe en el archivo.

devnull
fuente
¿puedes decir qué hace grep -Fq "$ 1"?
Jishnu U Nair
Y el script da error grep: el archivo de entrada 'mycron' también es la salida
Jishnu U Nair
@JishnuUNair -Fharía grepinterpretar el patrón como una cadena fija.
devnull
@JishnuUNair ¿Está seguro de que copió el texto anterior correctamente?
devnull
Sí, lo he copiado correctamente.
Jishnu U Nair
1

de bash yo uso

    crontab -l | { cat; echo "*/10 * * * * /script/script.sh > /dev/null 2>&1"; } | crontab -

Utilice también este script para agregar entradas cron en servidores remotos

    cronok="##";
    cronok+=`ssh $host 'crontab -l'`;
    pattern="reboot.sh"

    if [[ "$cronok" == *${pattern}* ]]; then
         echo "found cron  at [$host]"
      else
        echo "Cron at [$host] not found adding now"
       `ssh $host 'crontab -l | { cat; echo "*/10 * * * * /root/reboot.sh > /dev/null 2>&1"; } | crontab -'`
       echo "finished cron"
    fi
Markus07
fuente
0

Puede escribir un script y agregarlo a crontab para detenerlo:

####You should calculate tiem you want kill your script.
#######code of calculating........
pid=`ps ax |egrep myscript |awk {'print $1'}`
kill -9 $pid
#OR
kill $pid
Golfo pérsico
fuente
3
Esto no responde la pregunta. Además, kill -9solo debe hacerse como último recurso - unix.stackexchange.com/questions/8916/…
Graeme