Schemalägga filöverföring via FTP.

Permalänk
Medlem

Schemalägga filöverföring via FTP.

Har börjat prova Linux igen på min ena server (Linux Mint 21 Mate).

Lyckas dock inte förstå hur jag ska kunna schemalägga en filöverföring via FTP (ska ske varje timma). Det ska dessutom ske från den virtuella c: i Wine.

Visa signatur

JJ2 Multiplayer
JJ2 ZStats

[1] Ryzen 5800X | 5500XT | Kingston A2000 | Lenovo G24-10 144Hz [2] Ryzen 5700G | RX 560 | WD Blue SN550 [3] Ryzen 5600G | Kingston A2000 [4] Ryzen 3600 | GT 740 | 850 EVO [5] Ryzen 3600 | Geforce 405 | 850 EVO (alla är i bruk)

Permalänk
Medlem

Skapa ett bash-script som utför det du vill, och sedan skapa ett cron jobb som kör skriptet på bestämd tidpunkt.
Finns kanske bättre sätt, men så hade jag gjort.

Visa signatur

Chassi: Cooler Master MasterBox NR200P Kylning: NZXT Kraken Z63 PSU: Corsair SF750
CPU: AMD Ryzen 5800X GPU: ASUS RTX 3080 TUF Gaming OC V2
RAM: Corsair Vengeance LPX Black 32GB 3200Mhz MOBO: Asus ROG STRIX B550-I GAMING
SSD:
Samsung EVO 970 500GB SDD2: Samsung EVO 970 500GB
Övrigt: Iqunix F60, Logitech G Pro Superlight, LG 34GN850-B, ModMic, Beyerdynamic DT 770 Pro

Permalänk
Medlem

Det virtuella c: i wine är troligtvis ~/.wine/drive_c/ såvida då du inte kör med flera prefix eller ändrat standardinställningen.

Permalänk
Medlem
Skrivet av murzoo:

Skapa ett bash-script som utför det du vill, och sedan skapa ett cron jobb som kör skriptet på bestämd tidpunkt.
Finns kanske bättre sätt, men så hade jag gjort.

Hur skulle ett sådant script se ut och hur schemalägger man det i Linux?

Visa signatur

JJ2 Multiplayer
JJ2 ZStats

[1] Ryzen 5800X | 5500XT | Kingston A2000 | Lenovo G24-10 144Hz [2] Ryzen 5700G | RX 560 | WD Blue SN550 [3] Ryzen 5600G | Kingston A2000 [4] Ryzen 3600 | GT 740 | 850 EVO [5] Ryzen 3600 | Geforce 405 | 850 EVO (alla är i bruk)

Permalänk
Medlem

Cron som nämnts är ett sätt.
Själv kör jag mina backuper med systemd service som startas via systemd timer vid förutbestämda tider och intervall.

https://askubuntu.com/questions/1083537/how-do-i-properly-ins...

Permalänk
Avstängd
Skrivet av maweric:

Hur skulle ett sådant script se ut och hur schemalägger man det i Linux?

För att ge dig exakta exempel så valde jag att använda lftp för ändamålet, sedan finns det hur många sätt att göra det du vill på som helst men här är några exempel jag kom att tänka på:

Spara följande i lftp_backup.sh

cat <<! > lftp_backup.sh #!/bin/bash user="$(whoami)" pass="passwordHere" server="foo.sweclockers.com" port="21" target_dir="/var/log" source_dir="$HOME/backup" lftp \ -e open \ -u ${user}:${password} \ ftp://${server}:${21} -e \ "mirror -R ${target_dir} ${source_dir};exit" !

För att ladda upp target_dir till source_dir varje timma kan du göra följande.

1. Lägg till det i cron manuellt:

crontab -e

Lägg till nedan för att köra det varje 59:e minut i klockan, dvs 00:59:00, 01:59:00, 02:59:00 osv

59 * * * * bash /opt/scripts/lftp_backup.sh

2. Använd en while true loop:

while true do bash /opt/scripts/lftp_backup.sh sleep 3600 done

För att prova det ovan, för att förstå det så gör såhär i en tabb:

Kopiera och klistra in:

while true; do echo -e "[$(date +%H:%M:%S)] - Skickar en backup till ..."; sleep 4; done [16:58:47] - Skickar en backup till ... [16:58:51] - Skickar en backup till ... [16:58:55] - Skickar en backup till ... [16:58:59] - Skickar en backup till ... [16:59:03] - Skickar en backup till ... [16:59:07] - Skickar en backup till ... [16:59:11] - Skickar en backup till ... [16:59:15] - Skickar en backup till ... [16:59:19] - Skickar en backup till ... [16:59:23] - Skickar en backup till ... [16:59:27] - Skickar en backup till ... [16:59:31] - Skickar en backup till ... [16:59:35] - Skickar en backup till ... [16:59:39] - Skickar en backup till ...

Byt ut 4 till 3600 och lägg till kommandot för att skicka ftp filen/mappen, exempel se nedan:

while true; do echo -e "[$(date +%H:%M:%S)] - Skickar en backup till ..."; lftp -e open -u user:password ftp://hostname:port \ -e "mirror -R [/path/to/local_dir] [/path/to/ftp_dir]" sleep 3600; done

Byt ut lftp till vad du önskar använda.

// wuseman

Permalänk
Medlem
Skrivet av wuseman:

För att ge dig exakta exempel så valde jag att använda lftp för ändamålet, sedan finns det hur många sätt att göra det du vill på som helst men här är några exempel jag kom att tänka på:

Spara följande i lftp_backup.sh

cat <<! > lftp_backup.sh #!/bin/bash user="$(whoami)" pass="passwordHere" server="foo.sweclockers.com" port="21" target_dir="/var/log" source_dir="$HOME/backup" lftp \ -e open \ -u ${user}:${password} \ ftp://${server}:${21} -e \ "mirror -R ${target_dir} ${source_dir};exit" !

För att ladda upp target_dir till source_dir varje timma kan du göra följande.

1. Lägg till det i cron manuellt:

crontab -e

Lägg till nedan för att köra det varje 59:e minut i klockan, dvs 00:59:00, 01:59:00, 02:59:00 osv

59 * * * * bash /opt/scripts/lftp_backup.sh

2. Använd en while true loop:

while true do bash /opt/scripts/lftp_backup.sh sleep 3600 done

För att prova det ovan, för att förstå det så gör såhär i en tabb:

Kopiera och klistra in:

while true; do echo -e "[$(date +%H:%M:%S)] - Skickar en backup till ..."; sleep 4; done [16:58:47] - Skickar en backup till ... [16:58:51] - Skickar en backup till ... [16:58:55] - Skickar en backup till ... [16:58:59] - Skickar en backup till ... [16:59:03] - Skickar en backup till ... [16:59:07] - Skickar en backup till ... [16:59:11] - Skickar en backup till ... [16:59:15] - Skickar en backup till ... [16:59:19] - Skickar en backup till ... [16:59:23] - Skickar en backup till ... [16:59:27] - Skickar en backup till ... [16:59:31] - Skickar en backup till ... [16:59:35] - Skickar en backup till ... [16:59:39] - Skickar en backup till ...

Byt ut 4 till 3600 och lägg till kommandot för att skicka ftp filen/mappen, exempel se nedan:

while true; do echo -e "[$(date +%H:%M:%S)] - Skickar en backup till ..."; lftp -e open -u user:password ftp://hostname:port \ -e "mirror -R [/path/to/local_dir] [/path/to/ftp_dir]" sleep 3600; done

Byt ut lftp till vad du önskar använda.

// wuseman

Tack!!

Ska försöka hinna med att prova detta i helgen.

Visa signatur

JJ2 Multiplayer
JJ2 ZStats

[1] Ryzen 5800X | 5500XT | Kingston A2000 | Lenovo G24-10 144Hz [2] Ryzen 5700G | RX 560 | WD Blue SN550 [3] Ryzen 5600G | Kingston A2000 [4] Ryzen 3600 | GT 740 | 850 EVO [5] Ryzen 3600 | Geforce 405 | 850 EVO (alla är i bruk)

Permalänk
Medlem
Skrivet av wuseman:

För att ge dig exakta exempel så valde jag att använda lftp för ändamålet, sedan finns det hur många sätt att göra det du vill på som helst men här är några exempel jag kom att tänka på:

Spara följande i lftp_backup.sh

cat <<! > lftp_backup.sh #!/bin/bash user="$(whoami)" pass="passwordHere" server="foo.sweclockers.com" port="21" target_dir="/var/log" source_dir="$HOME/backup" lftp \ -e open \ -u ${user}:${password} \ ftp://${server}:${21} -e \ "mirror -R ${target_dir} ${source_dir};exit" !

För att ladda upp target_dir till source_dir varje timma kan du göra följande.

1. Lägg till det i cron manuellt:

crontab -e

Lägg till nedan för att köra det varje 59:e minut i klockan, dvs 00:59:00, 01:59:00, 02:59:00 osv

59 * * * * bash /opt/scripts/lftp_backup.sh

2. Använd en while true loop:

while true do bash /opt/scripts/lftp_backup.sh sleep 3600 done

För att prova det ovan, för att förstå det så gör såhär i en tabb:

Kopiera och klistra in:

while true; do echo -e "[$(date +%H:%M:%S)] - Skickar en backup till ..."; sleep 4; done [16:58:47] - Skickar en backup till ... [16:58:51] - Skickar en backup till ... [16:58:55] - Skickar en backup till ... [16:58:59] - Skickar en backup till ... [16:59:03] - Skickar en backup till ... [16:59:07] - Skickar en backup till ... [16:59:11] - Skickar en backup till ... [16:59:15] - Skickar en backup till ... [16:59:19] - Skickar en backup till ... [16:59:23] - Skickar en backup till ... [16:59:27] - Skickar en backup till ... [16:59:31] - Skickar en backup till ... [16:59:35] - Skickar en backup till ... [16:59:39] - Skickar en backup till ...

Byt ut 4 till 3600 och lägg till kommandot för att skicka ftp filen/mappen, exempel se nedan:

while true; do echo -e "[$(date +%H:%M:%S)] - Skickar en backup till ..."; lftp -e open -u user:password ftp://hostname:port \ -e "mirror -R [/path/to/local_dir] [/path/to/ftp_dir]" sleep 3600; done

Byt ut lftp till vad du önskar använda.

// wuseman

Om det ska vara en specifik fil som ska laddas upp, hur ska det då se ut?

Visa signatur

JJ2 Multiplayer
JJ2 ZStats

[1] Ryzen 5800X | 5500XT | Kingston A2000 | Lenovo G24-10 144Hz [2] Ryzen 5700G | RX 560 | WD Blue SN550 [3] Ryzen 5600G | Kingston A2000 [4] Ryzen 3600 | GT 740 | 850 EVO [5] Ryzen 3600 | Geforce 405 | 850 EVO (alla är i bruk)

Permalänk
Avstängd
Skrivet av maweric:

Om det ska vara en specifik fil som ska laddas upp, hur ska det då se ut?

Byt ut mirror -R till put:

-e "put /mapp/till/flnamn.txt /mapp/"

Permalänk
Medlem

Oj vad man känner sig som en total amatör.

Får felet "certificate verification: not trusted" med lftp.
Försöker lägga in certifikatet, men har ingen katalog vid namn .lftp eller .lftprc.

Visa signatur

JJ2 Multiplayer
JJ2 ZStats

[1] Ryzen 5800X | 5500XT | Kingston A2000 | Lenovo G24-10 144Hz [2] Ryzen 5700G | RX 560 | WD Blue SN550 [3] Ryzen 5600G | Kingston A2000 [4] Ryzen 3600 | GT 740 | 850 EVO [5] Ryzen 3600 | Geforce 405 | 850 EVO (alla är i bruk)

Permalänk
Avstängd
Skrivet av maweric:

Oj vad man känner sig som en total amatör.

Får felet "certificate verification: not trusted" med lftp.
Försöker lägga in certifikatet, men har ingen katalog vid namn .lftp eller .lftprc.

Nej då, alla har vi varit där.

Det är bra du försöker.

mkdir ~/.lftp echo "set ssl:verify-certificate no" >> ~/.lftp/rc

Löser det om du inte har något certificat.

Vill du använda certifkat, ställ in nedan i ~/.lftp/rc

set ssl:ca-file "/etc/ssl/certs/ca-certificates.crt"

Slängde upp en default config med förklaringar för dig så blir det lättare framöver, bara fråga om du undrar något annat. Rsync är väldigt omtyckt bland många också men jag tycker lftp är överlägset på grund av hur snabbt man kan överföra filer parallelt, extremt snabbt.

https://gist.github.com/wuseman/4a5f89a46d447861b09ad5e7dca0b...

Är det bara en fil du vill ladda upp titt som tätt så funkar ju curl bra:

curl -s -T test.txt ftp://foo:boo@127.0.0.1:21/mapp/test.txt -v * Trying 127.0.0.1:21... * Connected to 127.0.0.1 (127.0.0.1) port 21 (#0) < 220 wftp (glFTPd 2.12 (Dec 25 2021) 64BiT Linux+TLS(OpenSSL 3.0.1 14 Dec 2021)+SSP) ready.

Är du paranoid, så kan du köra kommandot med lösenordet nästan helt anonymt även från processes iom lösenordet, te.x:

{ curl -s -T test.txt ftp://foo:boo@127.0.0.1:21/mapp/test.txt; } &> /dev/null

Är det varje midnatt du vill skicka upp samma fil, räcker det att du skriver det nedan i cron direkt, exakt nedan gör det du önskar. Är det en mapp så går det ju även att skapa ett arkiv först och sedan skicka upp arkivet om du inte har något emot att det är arkiverat, då är det bara att arkivera vald mapp, sedan skicka upp med curl direkt efter och så fortsätter det så varje midnatt 23.59.

59 * * * * curl -s -T test.txt ftp://foo:boo@127.0.0.1:21/mapp/test.txt

Nu har du lite exempel, foo:boo = user:password

Ifall du inte känner till denna sidan så är den otroligt bra att veta om ifall om man glömmer av hur cron ställs in:

https://crontab.guru/

Har du ssh access till servern, så kan du ju bara göra följande:

tar zcf - /mapp/att/spara \ |ssh -t foo@server 'cat - > mapp-$(date +%y-%m-%Y).tar.gz'

Finns många många mer exempel, nu har du några exakta i alla fall.

// wuseman

Permalänk
Medlem
Skrivet av wuseman:

Nej då, alla har vi varit där.

Det är bra du försöker.

mkdir ~/.lftp echo "set ssl:verify-certificate no" >> ~/.lftp/rc

Löser det om du inte har något certificat.

Vill du använda certifkat, ställ in nedan i ~/.lftp/rc

set ssl:ca-file "/etc/ssl/certs/ca-certificates.crt"

Slängde upp en default config med förklaringar för dig så blir det lättare framöver, bara fråga om du undrar något annat. Rsync är väldigt omtyckt bland många också men jag tycker lftp är överlägset på grund av hur snabbt man kan överföra filer parallelt, extremt snabbt.

https://gist.github.com/wuseman/4a5f89a46d447861b09ad5e7dca0b...

Är det bara en fil du vill ladda upp titt som tätt så funkar ju curl bra:

curl -s -T test.txt ftp://foo:boo@127.0.0.1:21/mapp/test.txt -v * Trying 127.0.0.1:21... * Connected to 127.0.0.1 (127.0.0.1) port 21 (#0) < 220 wftp (glFTPd 2.12 (Dec 25 2021) 64BiT Linux+TLS(OpenSSL 3.0.1 14 Dec 2021)+SSP) ready.

Är du paranoid, så kan du köra kommandot med lösenordet nästan helt anonymt även från processes iom lösenordet, te.x:

{ curl -s -T test.txt ftp://foo:boo@127.0.0.1:21/mapp/test.txt; } &> /dev/null

Är det varje midnatt du vill skicka upp samma fil, räcker det att du skriver det nedan i cron direkt, exakt nedan gör det du önskar. Är det en mapp så går det ju även att skapa ett arkiv först och sedan skicka upp arkivet om du inte har något emot att det är arkiverat, då är det bara att arkivera vald mapp, sedan skicka upp med curl direkt efter och så fortsätter det så varje midnatt 23.59.

59 * * * * curl -s -T test.txt ftp://foo:boo@127.0.0.1:21/mapp/test.txt

Nu har du lite exempel, foo:boo = user:password

Ifall du inte känner till denna sidan så är den otroligt bra att veta om ifall om man glömmer av hur cron ställs in:

https://crontab.guru/

Har du ssh access till servern, så kan du ju bara göra följande:

tar zcf - /mapp/att/spara \ |ssh -t foo@server 'cat - > mapp-$(date +%y-%m-%Y).tar.gz'

Finns många många mer exempel, nu har du några exakta i alla fall.

// wuseman

Tack!

Nu tar det sig

En av filerna ska döpas om så den heter något annat på servern. Put verker inte fungera på samma sätt på lftp som ftp i det fallet?

Lyckas heller inte få "exit" att fungera utan att manuellt skriva det i terminalfönstret.

Visa signatur

JJ2 Multiplayer
JJ2 ZStats

[1] Ryzen 5800X | 5500XT | Kingston A2000 | Lenovo G24-10 144Hz [2] Ryzen 5700G | RX 560 | WD Blue SN550 [3] Ryzen 5600G | Kingston A2000 [4] Ryzen 3600 | GT 740 | 850 EVO [5] Ryzen 3600 | Geforce 405 | 850 EVO (alla är i bruk)

Permalänk
Avstängd
Skrivet av maweric:

Tack!

Nu tar det sig

En av filerna ska döpas om så den heter något annat på servern. Put verker inte fungera på samma sätt på lftp som ftp i det fallet?

Lyckas heller inte få "exit" att fungera utan att manuellt skriva det i terminalfönstret.

Härligt.

Jodå, det skall det allt göra med put.

Prova:

lftp -d -e open ftp://user:password@host:port -e "ls;exit"

Så ser du hur det fungerar fint med exit i ett exempel

Permalänk
Medlem
Skrivet av wuseman:

Härligt.

Jodå, det skall det allt göra med put.

Får dock inte detta att fungera. Provar följande.

-e "put .wine/drive_c/Spel/Zeal_Duels/playlog001.txt playlogzd.txt"

Resulterar i att playlog001.txt överförs med sitt ursprungliga filnamn och playlogzd.txt inte hittas på den lokala datorn (vilket är sant, för den finns ju inte).

Edit: Hittade hur det skulle göras. -o

-e "put .wine/drive_c/Spel/Zeal_Duels/playlog001.txt -o playlogzd.txt"

Tack @wuseman för all hjälp!

Visa signatur

JJ2 Multiplayer
JJ2 ZStats

[1] Ryzen 5800X | 5500XT | Kingston A2000 | Lenovo G24-10 144Hz [2] Ryzen 5700G | RX 560 | WD Blue SN550 [3] Ryzen 5600G | Kingston A2000 [4] Ryzen 3600 | GT 740 | 850 EVO [5] Ryzen 3600 | Geforce 405 | 850 EVO (alla är i bruk)