Como hacer un scrit que se ejecute al inicio o al final com sytemd Ubuntu

¿En qué podemos ayudarte?
< Regresar
Estás aquí:
Imprimir

Se requiere 2 archivos, uno que es nombre.service (archivo de configuracion) y el otro que es el script a ejecutar, no olvidar de hacer ejecutable el script.

  1. /usr/bin/copiaarchivos
  2. sudo nano /etc/systemd/system/copiaarchivos.service
sudo mkdir -p /var/log/copiaarchivos
sudo nano /usr/bin/copiaarchivos
#!/bin/bash
source /usr/bin/copiaarchivoslogge.sh
SCRIPTENTRY
updateUserDetails(){
#    ENTRY
#    DEBUG "Username: $1, Key: $2"
    INFO "$1"
#    EXIT
}

secopio(){
if [ "$1" -ne "0"  ]
then
    ERROR "La copia fallo!!"
    exit 1
fi
}       
INFO "Copiando directorio de Freenas Amorcito al disco duro..."
exec > >(while read -r line; do printf '%s %s\n' "$line"; updateUserDetails "$line"; done;) 2>&1
rsync -azvh /home/zague/Nas/zague/Amorcito/ '/media/zague/Nuevo vol/amorcitojulio2020'
secopio "$?"
INFO "Copiando directorio de Freenas fonts al disco duro..."
rsync -azvh /home/zague/Nas/zague/fonts/ '/media/zague/Nuevo vol/fonts'
secopio "$?"
INFO "Copiando directorio de Freenas migracion al disco duro..."
rsync -azvh /home/zague/Nas/zague/migracion '/media/zague/Nuevo vol'
secopio "$?"
SCRIPTEXIT

--------
sudo chmod +x /usr/bin/copiaarchivos

El script anterior manda a llamar a otro script, lo pongo abajo para tener la referncia completa

sudo nano /usr/bin/copiaarchivoslogge.sh
#!/bin/bash

SCRIPT_LOG=/var/log/copiaarchivos/SystemOut.log
touch $SCRIPT_LOG

function SCRIPTENTRY () {
 timeAndDate=`date "+%b %d %H:%M:%S %Y"`
 script_name=`basename "$0"`
 script_name="${script_name%.*}"
# echo "[$timeAndDate] [DEBUG]  > $script_name $FUNCNAME" >> $SCRIPT_LOG
 echo "[$timeAndDate] [DEBUG]  > Iniciando $script_name script." >> $SCRIPT_LOG
}

function SCRIPTEXIT(){
 script_name=`basename "$0"`
 script_name="${script_name%.*}"
# echo "[$timeAndDate] [DEBUG]  < $script_name $FUNCNAME" >> $SCRIPT_LOG
 echo "[$timeAndDate] [DEBUG]  < Script $script_name terminado." >> $SCRIPT_LOG
}

function ENTRY(){
 local cfn="${FUNCNAME[1]}"
 timeAndDate=`date "+%b %d %H:%M:%S %Y"`
# echo "[$timeAndDate] [DEBUG]  > $cfn $FUNCNAME" >> $SCRIPT_LOG
 echo "[$timeAndDate] [DEBUG]  > Iniciando copia..." >> $SCRIPT_LOG
}

function EXIT(){
 local cfn="${FUNCNAME[1]}"
 timeAndDate=`date "+%b %d %H:%M:%S %Y"`
# echo "[$timeAndDate] [DEBUG]  < $cfn $FUNCNAME" >> $SCRIPT_LOG
 echo "[$timeAndDate] [DEBUG]  Copiado!!" >> $SCRIPT_LOG
}


function INFO(){
 local function_name="${FUNCNAME[1]}"
    local msg="$1"
    timeAndDate=`date "+%b %d %H:%M:%S %Y"`
    echo "[$timeAndDate] [INFO]  $msg" >> $SCRIPT_LOG
}


function DEBUG(){
 local function_name="${FUNCNAME[1]}"
    local msg="$1"
    timeAndDate=`date "+%b %d %H:%M:%S %Y"`
 echo "[$timeAndDate] [DEBUG]  $msg" >> $SCRIPT_LOG
}

function ERROR(){
 local function_name="${FUNCNAME[1]}"
    local msg="$1"
    timeAndDate=`date "+%b %d %H:%M:%S %Y"`
    echo "[$timeAndDate] [ERROR]  $msg" >> $SCRIPT_LOG
}

----------
sudo chmod +x /usr/bin/copiaarchivoslogge.sh

Con esto y se puede manipular con el sudo systemctl enable copiaarchivos.service y sudo systemctl start copiaarchivos.service

En el caso de este script solo se ejecuta al apagar el equipo y solo se ejecuta cuando apago la maquina y el servicio es dado de baja.

El siguiente ejemplo sirve para bloquear o desbloquear uno o mas puertos en ubuntu con el firewall ufw

sudo nano ufwispconfig.sh

#!/bin/bash
start() {
  exec ufw deny proto tcp from any to any port 80,8080
}

stop() {
  exec ufw allow proto tcp from any to any port 80,8080
  exec ufw status
}

case $1 in
  start|stop) "$1" ;;
esac

sudo nano /etc/systemd/system/portsispconfig.service

Unit]
Description=Baja puertos 80 y 8080 del ispconfig

[Service]
Type=oneshot
ExecStart=/root/scripts/ufwispconfg.sh start
ExecStop=/root/scripts/ufwispconfg.sh stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
Table of Contents

Deja un comentario