¿En qué podemos ayudarte?
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.
- /usr/bin/copiaarchivos
- 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