Cron Jobs#


1. Create a backup Scheduler every hour between 8:00 and 22:00#

8..22/1:00

1.1. Check if it was triggered#

grep CRON /var/log/syslog | tail -n 5

Crontab commands#

contab -e

2. Cronjob for MacMini#

#https://crontab.guru/
#@reboot (sleep 60 && echo "ondemand" | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor)
@reboot setpci -s 0:1f.0 0xa4.b=0

#PVEBackup
# 30 3 * * * /bin/bash /root/scripts/MMPVEBackupScript.sh > /dev/null 2>&1
30 3 * * * /bin/bash /mnt/pve/Software/Software/Scripts/Proxmox/pve_backup_universal.sh > /dev/null 2>&1

#hp1
#50 7 * * * /usr/bin/wakeonlan 94:57:a5:65:4e:90
#55 7 * * * /usr/sbin/pvesm set HP1BackupServer -disable false
#15 21 * * * /usr/sbin/pvesm set HP1BackupServer -disable true

#HP2
00 18 * * * /usr/bin/wakeonlan 94:57:a5:65:7e:88

#HP3
50 8 * * 7 /usr/bin/wakeonlan ec:b1:d7:7c:a9:48

#HP4
00 13 * * * /usr/bin/wakeonlan 20:67:7c:ee:63:80

#HP6
#50 7 * * * /usr/bin/wakeonlan 50:65:f3:f1:b8:90
#50 7 * * * /usr/sbin/pvesm set HP6BackupServer -disable false
#30 8 * * * /usr/sbin/pvesm set HP6BackupServer -disable true
#50 17 * * * /usr/bin/wakeonlan 50:65:f3:f1:b8:90
#50 17 * * * /usr/sbin/pvesm set HP6BackupServer -disable false
#30 18 * * * /usr/sbin/pvesm set HP6BackupServer -disable true

#HP7
05 9 * * * /usr/bin/wakeonlan ac:16:2d:6e:64:fc

#HP8
#50 8 * * * /usr/bin/wakeonlan 80:30:e0:3b:a5:74 ​

#HP8OLD
#45 7 * * * /usr/bin/wakeonlan 3c:d9:2b:03:d8:f2

#HP9OLD
#45 7 * * * /usr/bin/wakeonlan 68:b5:99:77:17:c2

#HP10OLD
#30 8 * * * /usr/bin/wakeonlan 00:26:55:29:0d:cc

#MP5.2TrueNAS
#00 08 * * 7 /usr/sbin/pvesm set MP5.2Backups -disable false
#00 11 * * 7 /usr/sbin/pvesm set MP5.2Backups -disable true

3. Cronjob HP4#

30 18 * * * /usr/sbin/pvesm set HP4BackupServer -disable true                                      
15 12 * * * /usr/sbin/shutdown -h now
00 19 * * * /usr/sbin/shutdown -h now

4. Cron Job to Auto Start After Power Failure for MacMini (autostart)#

crontab -e (crontab -l for a list of jobs)

On HP1,2,6,11, add line (to activate WOL):

@reboot (sleep 60 && echo "ondemand" | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor)

On Macs, Add line:

@reboot setpci -s 0:1f.0 0xa4.b=0

5. Conjob for HP1#

#10 22 * * * /usr/sbin/shutdown -h now
#59 7 * * * /usr/sbin/pvesm set HP4BackupServer -disable false
#10 22 * * * /usr/sbin/pvesm set HP4BackupServer -disable true
0 19 * * * /bin/bash /root/scripts/HP1PVEBackupScript.sh > /dev/null 2>&1
00 21 * * * echo "powersave" | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor >/dev/null
#00 09 * * * echo "performance" | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor >/dev/null

6. Cronjob pour HP1Backup Server#

#Pour permettre la sauvegagrade de la VM dans la même VM
00 03 * * * /usr/bin/systemctl stop qemu-guest-agent 
30 03 * * * /usr/bin/systemctl start qemu-guest-agent

7. Cronjob pour HP1GPU#

00 18 * * * rm -r "/home/marc/docker-compose/plexmediaserver/Library/Application Support/Plex Media Server/Cache"
00 8 * * * rm -r "/home/marc/docker-compose/plexmediaserver/Library/Application Support/Plex Media Server/Cache"
#00 8 * * * rm -r "/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Cache"
#00 18 * * * rm -r "/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Cache"
30 8 * * * /usr/bin/docker image prune -a -f

8. Cronjob to update VM#

30 8 * * 0  apt update && apt full-upgrade -y >> /var/log/apt_upgrade.log 2>&1

Consult the log:

cat /var/log/apt_upgrade.log

See if a job is running:

ps aux | grep apt

9. Conjob to backup a folder every hour#

0 * * * * /usr/bin/tar -czvf "/home/marc/docker-compose/$(date '+\%Y-\%m-\%d_\%Hh\%M')_Pangolin.tar.gz" /home/marc/docker-compose/pangolin

10. Rsync HP1Docker Paperless > UNAS-Pro (with smb verification, folder protection, one way every hour)#

Add control file at destination:

echo "DO NOT DELETE — rsync safety canary for Paperless mirror" \
  > /mnt/Documents/.paperless-canary
chmod 444 /mnt/Documents/.paperless-canary
mkdir -p /home/marc/docker-compose/paperless/scripts/
nano /home/marc/docker-compose/paperless/scripts/paperless-sync.sh

Script Content (paperless-sync.sh):

#!/bin/bash

LOG="/home/marc/docker-compose/paperless/logs/Rsync$(date '+%Y-%m-%d %Hh%M') Paperless-Rsync-cronjob.log"

echo "=== $(date) Starting Paperless sync ===" | tee -a "$LOG"

mountpoint -q /mnt/Documents && \
findmnt -n -t cifs /mnt/Documents >/dev/null 2>&1 && \
[ -f /mnt/Documents/.paperless-canary ] && \
rsync -avh --delete --progress --stats /mnt/paperless/media/documents/originals/ /mnt/Documents/Paperless/ | tee -a "$LOG"

echo "=== $(date) Sync completed ===" | tee -a "$LOG"

# Delete old logs
find /home/marc/docker-compose/paperless/logs/ -type f -name '*Paperless-Rsync-cronjob.log' -mtime +7 -delete

Make executable and add to crontab:

chmod +x /home/marc/docker-compose/paperless/scripts/paperless-sync.sh
crontab -e
0 * * * * /home/marc/docker-compose/paperless/scripts/paperless-sync.sh

Setup logs and logrotate:

mkdir -p /home/marc/docker-compose/paperless/logs && chown marc:marc /home/marc/docker-compose/paperless/logs/
nano /etc/logrotate.d/paperless-rsync

Logrotate config:

/home/marc/docker-compose/paperless/logs/*.log {
    daily
    rotate 7
    missingok
    notifempty
    copytruncate
}

Manual log purge: logrotate -f /etc/logrotate.d/paperless-rsync

Manual dry run: ```bash LOG="/home/marc/docker-compose/paperless/logs/Rsync/$(date ‘+%Y-%m-%d %Hh%M’) Paperless-Rsync-cronjob-dryrun.log" &&
mountpoint -q /mnt/Documents &&
findmnt -n -t cifs /mnt/Documents >/dev/null 2>&1 &&
[ -f /mnt/Documents/.paperless-canary ] &&
rsync -avh –delete –dry-run /mnt/paperless/media/documents/originals/ /mnt/Documents/Paperless/ » “$LOG” 2>&1


**Check what needs to be synced:**
```bash
echo "=== Dry-run rsync check ===" && \
rsync -avhn --delete -i /mnt/paperless/media/documents/originals/ /mnt/Documents/Paperless/ && \
echo "=== Diff check ===" && \
diff -r /mnt/paperless/media/documents/originals/ /mnt/Documents/Paperless/ && \
echo "=== File counts ===" && \
echo "Source:" $(find /mnt/paperless/media/documents/originals/ | wc -l) "files" && \
echo "Destination:" $(find /mnt/Documents/Paperless/ | wc -l) "files"

Manual sync:

LOG="/home/marc/docker-compose/paperless/logs/Rsync/$(date '+%Y-%m-%d %Hh%M') Paperless-Rsync-cronjob.log"
echo "=== $(date) Starting Paperless sync ===" | tee -a "$LOG"
mountpoint -q /mnt/Documents && \
findmnt -n -t cifs /mnt/Documents >/dev/null 2>&1 && \
[ -f /mnt/Documents/.paperless-canary ] && \
rsync -avh --delete --progress --stats /mnt/paperless/media/documents/originals/ /mnt/Documents/Paperless/ | tee -a "$LOG"
echo "=== $(date) Sync completed ===" | tee -a "$LOG"

Check logs:

tail -n 50 "/home/marc/docker-compose/paperless/logs/$(date '+%Y-%m-%d %Hh%M') Paperless-Rsync-cronjob.log"