Hey
Ik moet even schetsen voor een beeld te krijgen met welk probleem dat ik precies zit.
Ik heb 2 servers, eentje is een Power I (IBM) en de andere is een standaard Ubuntu Linux.
Op de IBM is een beperkte 'PASE' omgeving beschikbaar, wat eigenlijk AIX is met wat IBM special sauce over.
Vroeger werden de PDF's waar het over gaat, via SMB protocol overgezet, maar dat is niet veilig genoeg beoordeelt, dus moest daar een andere oplossing voor komen.
PASE ondersteunt SSH en dus ook het SCP commando. Let wel, het gaat hier per over 40.000 tot 200.000 files per locatie (er zijn een 45 tal locaties) die gekopieerd moet worden.
Ik heb public / private key pair authenticatie werkend gekregen en ik kan dus scripting gebuiken om de files over te zetten.
Voorwaarde is verder nog dat er een check gedaan word dat de files ouder als 30 dagen moeten zijn vóór ze gekopieerd mogen worden (daarna volgt 15 dagen later een delete)
Ik heb een script gemaakt dat een lijst gaat opvragen van alle files per locatie op de server en die overbrengt naar de Linux server.
Op de Linux server wordt dan een vergelijk gedaan met welke files reeds op de locatie staan daar wordt dan een diff op gedaan om de uiteindelijke lijst vast te stellen.
Daarna volgt dan de scp opdracht per file om de effectieve overzetting te doen.
Sinds ik de functie geïntegreerd heb om te vergelijken neemt mijn opdracht heel veel en heel lang CPU weg, maar werkt wel uiteindelijk.
Vraag: is er een betere manier om dit te doen?
Ik moet even schetsen voor een beeld te krijgen met welk probleem dat ik precies zit.
Ik heb 2 servers, eentje is een Power I (IBM) en de andere is een standaard Ubuntu Linux.
Op de IBM is een beperkte 'PASE' omgeving beschikbaar, wat eigenlijk AIX is met wat IBM special sauce over.
Vroeger werden de PDF's waar het over gaat, via SMB protocol overgezet, maar dat is niet veilig genoeg beoordeelt, dus moest daar een andere oplossing voor komen.
PASE ondersteunt SSH en dus ook het SCP commando. Let wel, het gaat hier per over 40.000 tot 200.000 files per locatie (er zijn een 45 tal locaties) die gekopieerd moet worden.
Ik heb public / private key pair authenticatie werkend gekregen en ik kan dus scripting gebuiken om de files over te zetten.
Voorwaarde is verder nog dat er een check gedaan word dat de files ouder als 30 dagen moeten zijn vóór ze gekopieerd mogen worden (daarna volgt 15 dagen later een delete)
Ik heb een script gemaakt dat een lijst gaat opvragen van alle files per locatie op de server en die overbrengt naar de Linux server.
Op de Linux server wordt dan een vergelijk gedaan met welke files reeds op de locatie staan daar wordt dan een diff op gedaan om de uiteindelijke lijst vast te stellen.
Daarna volgt dan de scp opdracht per file om de effectieve overzetting te doen.
Sinds ik de functie geïntegreerd heb om te vergelijken neemt mijn opdracht heel veel en heel lang CPU weg, maar werkt wel uiteindelijk.
Vraag: is er een betere manier om dit te doen?
Bash:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
| #!/bin/bash set -e # userdir="*knip*" #sla de huidige datum op start=$(date +"%y-%m-%d_%T") #tel 30 dagen terug en kijk dan in welke map (per jaar) dat de PDF moet komen. jaar=$(date --date "-30 days" +'%Y') #get userid user=$(id -u -n) #verwijderd de eerste 2 characters van de gegenereerde lijst en sla die op als opgeruimd.txt cut -c 3- /srv/data/$userdir/INVOICES/t.list > /srv/data/$userdir/INVOICES/opgeruimd.txt # Step 1: Read the contents of opgeruimd.txt and store in an array mapfile -t files_to_copy < /srv/data/$userdir/INVOICES/opgeruimd.txt #check of de DIR reeds bestaat waar we in gaan schrijven en anders maak ik hem aan if [ ! -d /srv/data/$userdir/INVOICES/"$jaar" ]; then mkdir -p /srv/data/$userdir/INVOICES/"$jaar"; fi # Step 2: List the files in the target directory target_directory="/srv/data/$userdir/INVOICES/"$jaar"/" # Replace with your target directory existing_files=("$target_directory"/*) # Step 3: Compare the two lists and filter out existing files filtered_files=() for file in "${files_to_copy[@]}"; do exists=false for existing_file in "${existing_files[@]}"; do if [[ "${file##*/}" == "${existing_file##*/}" ]]; then exists=true break fi done if [ "$exists" = false ]; then filtered_files+=("$file") fi done #lees de file opgeruimd.txt in de variabele #value=`cat /srv/data/$userdir/INVOICES/opgeruimd.txt` #test of mijn value leeg is en schrijf dan een log weg om te laten zien dat ik wel degelijk gelopen heb if [ -z "$file" ] then echo "Script ran ok, but nothing to copy" >> log"$start".txt exit 0 else #for loop om door elke value in de file heen te lopen en te kopiëren naar een voor gedefinieerde plaats for file in "${filtered_files[@]}"; do #for value in $value #do scp $user@*naam_server*:/$userdir/FACTUREN/${file##*/} /srv/data/$userdir/INVOICES/"$jaar"/${file##*/} if [ $? != 0 ]; then echo "copy unsuccessfull of file "${file##*/} >> error"$start".log else echo "I am copying "${file##*/}"..." now=$(date) echo "copied "${file##*/} "at" "$now" >> log"$start".txt fi done fi exit |