FTP-Script

Hier bekommt Ihr Antworten auf Eure Fragen zum Eggdrop-Hosting von Shellfire

Moderatoren: Florian, Matze, Max, Lui

marcel
Beiträge: 42
Registriert: 10 Okt 2006 14:43
Kontaktdaten:

FTP-Script

Beitragvon marcel » 17 Jan 2007 22:03

Hi, ich hab folgendes Script bei mir eingefügt, damit die rankallstars.data vom MoxQuiz auf meine Homepage verschickt wird.


set ftp(host) "moxquiz.mo.funpic.de" #ftp host
set ftp(user) "MoxQuiz" #ftp user
set ftp(pass) "xXxXx" #ftp pass
set ftp(dir) "moxquizz/quizdata/rankallstars.data" #local dir where the files are stored
set ftp(updir) "/" #remote dir where the files will be uploaded

bind time - "10 * * * *" timed:upload

proc timed:upload {m h d m y} {
global ftp

foreach file [lsort [glob -directory $ftp(dir) *]] {

if { [file readable $file] && [file isfile $file]} {

[exec ftp -u ftp://$ftp(user):$ftp(pass)@$ftp(host)/$ftp(updir)/$file $file]
putquick "PRIVMSG StarteR2 :Hey StarteR2, $ftp(host) $ftp(user) $ftp(pass) $ftp(dir) $ftp(updir)"
}
}


putlog "Upload tcl by arcADE, Corected by AdrianK & Modified by KilingShadow Loaded"



Wenn ich den Bot starte, kommt aber folgender Fehler:
[21:58] --- Loading eggdrop v1.6.17 (Wed Jan 17 2007)
[21:58] Module loaded: dns
[21:58] Module loaded: channels
[21:58] Module loaded: server
[21:58] Module loaded: ctcp
[21:58] Module loaded: irc
[21:58] Module loaded: notes (with lang support)
[21:58] Module loaded: console (with lang support)
[21:58] Module loaded: blowfish
[21:58] Module loaded: transfer (with lang support)
[21:58] Module loaded: share
[21:58] quizchat loaded (URL BF GF IRL EMAIL DOB PHONE ICQ).
[21:58] use '.help userinfo' for commands.
[21:58] --- Initializing funstuff ...
[21:58] ---- read !hartei file, 409 entries.
[21:58] ---- read !weichei file, 530 entries.
[21:58] ---- read !phrase file, 309 entries.
[21:58] --- Initializing funstuff ... done.
[21:58] --- Initializing funstuff ...
[21:58] ---- read !hartei file, 409 entries.
[21:58] ---- read !weichei file, 530 entries.
[21:58] ---- read !phrase file, 309 entries.
[21:58] --- Initializing funstuff ... done.
[21:58] egghttp.tcl API v1.1.0 by strikelight now loaded.
[21:58] Wetter.tcl v0.12.8 geladen!
[21:58] Script loaded: Peak by perpleXa
[21:58] Srvx Auto-Auth Script loaded...
[21:58] Loaded  4ÅîR14ßðRñE15^911 lolgigle.tcl script v1 loaded
[21:58] Loaded  4ÅîR14ßðRñE15^911 lolgigle.tcl script v1 loaded
[21:58] Loaded  4ÅîR14ßðRñE15^911 lolgigle.tcl script v1 loaded
[21:58] Loaded  4ÅîR14ßðRñE15^911 lolgigle.tcl script v1 loaded
[21:58] Loaded  4ÅîR14ßðRñE15^911 lolgigle.tcl script v1 loaded
[21:58] Loaded  4ÅîR14ßðRñE15^911 lolgigle.tcl script v1 loaded
[21:58] 003 lolgigle.tcl script v1 loaded
[21:58] 003 lolgigle.tcl script v1 loaded
[21:58] 003 lolgigle.tcl script v1 loaded
[21:58] Idle Top 5 by TrashF @ QNet loaded.
[21:58] bseen1.4.2c: -- Bass's SEEN loaded --
[21:58] Loading seen database...
[21:58] Old seen data not found!
[21:58] If this is the first time you've run the script, don't worry.
[21:58] If there *should* be a data file from past runs of this script... worry.
[21:58] tcl: dcc sends/recieves loaded
[21:58] TCL LOADED: LogZipper 2.0 by Baerchen (keeping logs for 10 days)
[21:58] Tcl error in file 'eggdrop.conf':
[21:58] wrong # args: should be "set varName ?newValue?"
while executing
"set ftp(host) "moxquiz.mo.funpic.de" #ftp host"
(file "scripts/ftp.tcl" line 1)
invoked from within
"source scripts/ftp.tcl"
(file "eggdrop.conf" line 148)
[21:58] * CONFIG FILE NOT LOADED (NOT FOUND, OR ERROR)

Eggdrop v1.6.17 (C) 1997 Robey Pointer (C) 2004 Eggheads


Wisst Ihr, wo der Fehler liegt?

Danke schonmal,

Marcel
#Quiz.de @ irc.gamesurge.net

Florian
Site Admin
Beiträge: 464
Registriert: 29 Jun 2003 17:53

Beitragvon Florian » 17 Jan 2007 23:50

Hallo,

der Code liegt wohl in der folgenden Zeile:

Code: Alles auswählen

set ftp(host) "moxquiz.mo.funpic.de" #ftp host


das "# ftp host" wird von TCL nicht als Kommentar, sondern als Programmcode interpretiert, daher der Fehler.

Das hier wird vermutlich funktionieren:

Code: Alles auswählen

#ftp host
set ftp(host) "moxquiz.mo.funpic.de"




Viele Grüße
Florian Gattung
Shellfire Gattung & Behr GbR

marcel
Beiträge: 42
Registriert: 10 Okt 2006 14:43
Kontaktdaten:

Beitragvon marcel » 18 Jan 2007 01:25

Hi,

danke, jetzt läd es. =)

ich hab die # herausgenommen und musste noch eine zusätzliche klammer einbauen.


Die Datei wurde trotzdem nicht übertragen. Daher hab ich in der Zeile

[exec ftp -u ftp://$ftp(user):$ftp(pass)\@$ftp(host)/$ftp(updir)/$file $file]


noch das \ eingefuegt.

Der code sieht jetzt so aus:

set ftp(host) "moxquiz.mo.funpic.de"
set ftp(user) "MoxQuiz"
set ftp(pass) "xXxXx"
set ftp(dir) "moxquiz/scripts/moxquizz/quizdata/rankallstars.data"
set ftp(updir) "/"

bind time - "10 * * * *" timed:upload

proc timed:upload {m h d m y} {
global ftp

foreach file [lsort [glob -directory $ftp(dir) *]] {

if { [file readable $file] && [file isfile $file]} {

[exec ftp -u ftp://$ftp(user):$ftp(pass)\@$ftp(host)/$ftp(updir)/$file $file]
putquick "PRIVMSG StarteR2 :Hey StarteR2, $ftp(host) $ftp(user) $ftp(pass) $ftp(dir) $ftp(updir)"
}
}
}

putlog "Upload tcl by arcADE, Corected by AdrianK & Modified by KilingShadow Loaded"




Leider ist danach immer noch nichts auf dem Webspace angekommen. =/

Ich bin für jeden Vorschlag offen.^^

Danke,

Marcel
#Quiz.de @ irc.gamesurge.net

Florian
Site Admin
Beiträge: 464
Registriert: 29 Jun 2003 17:53

Beitragvon Florian » 18 Jan 2007 10:05

Hallo,

da auf den Shellfire-Servern der Kommandozeilen FTP-Interpreter "ncftp" installiert ist, würde ich dir vorschlagen, den hierbei mitgelieferten Befehl "ncftpput"zu verwenden.

ncftp verwendet zur Speicherung der FTP-Daten eine seperate Datei, z.B. ftpserver.ftp. Diese Datei muss folgende Zeilen enthalten:

Code: Alles auswählen

host ftp.mein-server.de
user ftpuser
pass ftppass
Natürlich sind die entsprechenden Werte zu ersetzen.


Es muss zum Hochladen einer Datei dann folgender Befehl benutzt werden:

Code: Alles auswählen

exec /usr/bin/ncftpput -f ./scripts/ftpserver.ftp /remote-dir ./scripts/quizdaten.log




Viele Grüße,
Florian Gattung

Shellfire Gattung & Behr GbR

marcel
Beiträge: 42
Registriert: 10 Okt 2006 14:43
Kontaktdaten:

Beitragvon marcel » 18 Jan 2007 17:42

hi,

ich glaub jetzt gehts, danke. (Ich muss noch die beiden Scripte zusammenfügen, dass der neue Befehl alle 24h ausgeführt wird.)

Danke,

Marcel
#Quiz.de @ irc.gamesurge.net

Florian
Site Admin
Beiträge: 464
Registriert: 29 Jun 2003 17:53

Beitragvon Florian » 19 Jan 2007 19:01

Hallo,

gib doch bitte noch einmal kurz bescheid wenn du sicher bist, dass es funktioniert. Dann kann ich den Thread schließen.


Danke!


Viele Grüße
Florian Gattung

Shellfire Gattung & Behr GbR

marcel
Beiträge: 42
Registriert: 10 Okt 2006 14:43
Kontaktdaten:

Beitragvon marcel » 19 Jan 2007 19:43

ok, mach ich.
#Quiz.de @ irc.gamesurge.net

marcel
Beiträge: 42
Registriert: 10 Okt 2006 14:43
Kontaktdaten:

Beitragvon marcel » 20 Jan 2007 14:14

Hi,

mit dem Senden funktioniert soweit prima. Nur bricht der Bot das Script immer ab, nachdem der senden-Befehl ausgefuehrt wurde. Daher führt er den Timer nur einmal aus. Ich hab es auch in das MoxQUiz-Script selbst eingebaut. Das bricht er auch ab. =/

Ich bin mal wieder für jeden input dankbar. =)

Danke,

Marcel
#Quiz.de @ irc.gamesurge.net

Florian
Site Admin
Beiträge: 464
Registriert: 29 Jun 2003 17:53

Beitragvon Florian » 21 Jan 2007 08:04

Hallo,

bei Timern ist es generell wichtig ist, den Bot neu zu starten, wenn am Timer etwas geändert wurde. Ein rehash ist dann odr nicht ausreichend.

Du könntest die Prozedur auch einmal testweise von "timed:upload" in "time:upload" umbenennen, was eher der Konvention entsprechen sollte. Manchmal machen solche einfachen Dinge ja ein derartiges Problem aus.

Ansonsten könntest du generell einfach mal testweise versuchen festzustellen, an welcher Stelle das Script fehlschlägt. Bekommst du denn eine genaue Fehlermeldung? Beendet sich der Eggdrop dabei?

Eine andere Möglichkeit wäre es, dass der "bind time" Befehl an irgendeiner anderen Stelle erneut aufgerufen wird und somit deinem "bind" ein wenig im Weg steht. Dieses Problem sollte aber mit der Variation des Namens der Prozedur von "timed:upload" nach "time:upload" gelöst werden, falls es die Ursache ist.


Gruß
Florian Gattung

Shellfire Gattung & Behr GbR

marcel
Beiträge: 42
Registriert: 10 Okt 2006 14:43
Kontaktdaten:

Beitragvon marcel » 21 Jan 2007 16:33

Hi,

auch der Neustart des Bots und die Änderung in time:upload hat leider nicht funktioniert.

Das Script schlägt nach der Zeile

Code: Alles auswählen

exec /usr/bin/ncftpput -f ./scripts/ftpserver.ftp /remote-dir ./scripts/quizdaten.log


fehl. Eine Fehlermeldung bekomme ich nicht. Ich habe die Zeile wahlweise mal mit einem "bind pub -|- !send time:upload" belegt, was ohne weiteres funktioniert. "bind join - * time:upload" geht hingegen nicht.

Die exec - Zeile wird aber vor dem abbruch noch ausgeführt. Nur ist danach das script tot und führt das Senden kein zweites mal durch. =/


Danke für Deine Hilfe,

Marcel
#Quiz.de @ irc.gamesurge.net

Florian
Site Admin
Beiträge: 464
Registriert: 29 Jun 2003 17:53

Beitragvon Florian » 21 Jan 2007 21:00

Hallo,

poste doch bitte noch einmal das gesamte Script. Das Script in Moxquizz direkt einzubauen, macht in meinen Augen nicht sehr viel Sinn. Am besten ist es, eine eigene .tcl Datei zu erstellen, die auch gesondert über "Scripte" geladen wird.



Grüße,
Florian Gattung

Shellfire Gattung & Behr GbR

marcel
Beiträge: 42
Registriert: 10 Okt 2006 14:43
Kontaktdaten:

Beitragvon marcel » 21 Jan 2007 22:07

Hi,


Ich hab das ganze einmal in ein log-zipper Script eingefügt:

set lz(logloc) "logs/"
set lz(duration) 10
set lz(sendlogs) 1
set lz_recipient(1) "moxquiz@gmx.de"

# CODEBASE BELOW

bind evnt - logfile lz_wait
proc lz_wait {logfile} {timer 1 lz_zip}
putlog "TCL LOADED: LogZipper 2.0 by Baerchen (keeping logs for $lz(duration) days)"




proc lz_zip { } {
global lz lz_recipient botnick {switch-logfiles-at} {keep-all-logs}
if {[info exists {logfile-suffix}]} {
global {logfile-suffix} } else {
set {logfile-suffix} ".%d%b%Y"


}
set lz(date) [strftime "%b_%d_%Y" [expr [clock seconds] - 86400]]
set lz(max) [expr [clock seconds] - ($lz(duration) * 86400) + 60]
set lz(filestomail) ""
set i 0; set j 0; set k 0
if {${keep-all-logs} == 0 && ${switch-logfiles-at} == 2500} {
putlog "Logzipper: Invalid configuration: log files do not switch. You might want to correct that."
return
}
if {${keep-all-logs} == 1} {
set lz(searchstr) "*[strftime ${logfile-suffix} [expr [unixtime] - 86400]]"} else {
set lz(searchstr) "*yesterday"
}
set lz(filelist) [glob -directory $lz(logloc) -nocomplain -- $lz(searchstr)]
foreach e $lz(filelist) {
if {$e == ""} {continue}
set f "[string range $e 0 [string last . $e]]$lz(date).tar.gz"
set lz(zerror) [catch {exec tar cfz $f $e}]
if {$lz(zerror)} {putlog "LogZipper: An error occured while trying to zip $e" ; continue}
set lz(ferror) [catch {file delete -force $e}]
if {$lz(ferror)} {putlog "LogZipper: An error occured while trying to delete $e"}
lappend lz(filestomail) [string range $f [expr [string last / $f] +1] end]
incr i
}
set lz(filelist) [glob -directory $lz(logloc) -nocomplain -- *.???_??_????.tar.gz]
foreach e $lz(filelist) {
if {$e == ""} {continue}
if {[file mtime $e] <= $lz(max)} {
set lz(ferror) [catch {file delete -force $e}]
if {$lz(ferror)} {putlog "LogZipper: An error occured while trying to delete $e"; continue}
incr j
}
}
set lz_status "LogZipper: zipped $i logs, deleted $j expired logs. "
if {$lz(sendlogs)} {
foreach e $lz(filestomail) {
if {$e == ""} {continue}
foreach el [array names lz_recipient] {
set rec [lindex $lz_recipient($el) 0]
set what [lrange $lz_recipient($el) 1 end]
foreach ele $what {
if {[string match -nocase *$ele* $e]} {
set lz(merror) [catch { exec uuencode $lz(logloc)$e $e | mail $rec }]
if {$lz(merror)} {putlog "LogZipper: An error occured while trying to uuencode or mail $e"; continue}
incr k
}
}
}
}
append lz_status "Sent $k logs via email."
}



putlog "$lz_status"

[exec /usr/bin/ncftpput -f ./scripts/belleserver.ftp /html/ ./scripts/moxquizz/quizdata/rankallstars.data]
[exec /usr/bin/ncftpput -f ./scripts/belleserver.ftp /html/ ./scripts/logzipper.txt]

}


wobei er da die rankallstars-data verschcikt, die logzipper.txt aber nicht mehr. Daher nehm ich an, dass der nach der exec-zeile das script beendet.

Alternativ hab ich das auch noch in ein anderes Script eingebaut, um die verschiedenen bind-Befehle zu testen:


set be_flood_control 0
set be_msg {
"Userliste verschickt: http://moxquiz.mo.funpic.de./quiz.html"

}

bind join - * be:reply
bind pub -|- !send be:reply
bind time - "10 * * * *" be:reply
proc be:reply {nick uhost handle channel text} {
global be_flood_control be_msg
if {$be_flood_control == "1"} {return 0}
set be_flood_control 1
utimer 7 [list set be_flood_control 0]
set temp_be $be_msg
set temp_be [lindex $temp_be [rand [llength $temp_be]]]
[exec /usr/bin/ncftpput -f ./scripts/ftpserver.ftp / ./quiz.html]
return 0
}
putlog "rankallstars send"




Hier reagiert er nur auf !send reagiert, unabhaengig davon, ob ich die drei binds einzeln setze oder alle drei gleichzeitig.


Danke für Deine Hilfe,

Marcel
#Quiz.de @ irc.gamesurge.net

Florian
Site Admin
Beiträge: 464
Registriert: 29 Jun 2003 17:53

Beitragvon Florian » 22 Jan 2007 20:12

Versuche zunächst mal, um den "exec"-Befehl herum die eckigen Klammern wegzulassen. An Stelle des Punktes in "./datei" oder "./scripts", versuche einmal die Tilde (~) zu verwenden.

Du könntest also die Zeile

Code: Alles auswählen

[exec /usr/bin/ncftpput -f ./scripts/ftpserver.ftp / ./quiz.html]
durch die Zeile

Code: Alles auswählen

exec /usr/bin/ncftpput -f ~/scripts/ftpserver.ftp / ~/quiz.html


ersetzen. Zu beachten ist, dass "~/" immer auf den Home-Ordner des Eggdrops zeigt, in dem sich auch der "scripts"-Ordner befindet. Darüber ob die Sache mit dem "./" immer einheitlich ist, bin ich mir nicht ganz im Klaren.

Beide obigen Änderungen könnten der Fehler gewesen sein. Was bei den binds sonst nicht stimmt, kann ich leider auf den ersten Blick nicht sagen, ich vermute ein evtl. fehlendes "*" an irgendeiner Stelle für die benötigten User-Flags.


Viele Grüße,
Florian Gattung

Shellfire Gattung & Behr GbR

marcel
Beiträge: 42
Registriert: 10 Okt 2006 14:43
Kontaktdaten:

Beitragvon marcel » 22 Jan 2007 20:58

Geht beides nicht. DAnn startet der Bot erst garnicht mehr. =/

Ich gebs auf.


Danke für Deine Hilfe!


MfG,

Marcel
#Quiz.de @ irc.gamesurge.net

Florian
Site Admin
Beiträge: 464
Registriert: 29 Jun 2003 17:53

Beitragvon Florian » 23 Jan 2007 06:26

Hallo,

hab mit die logzipper.tcl mal direkt angeschaut und einige Änderungen vorgenommen. (Eckige Klammern, Pfade korrigiert).

Der Bot ist nun gestartet, aber ob es funktioniert hat kann ich leider nicht sagen. Gib bitte nochmal bescheid.

Ich habe dir auch einige Anmerkungen in den Quellcode geschrieben, also schau es dir doch einfach mal an.


Viele Grüße
Florian Gattung

Shellfire Gattung & Behr GbR


Zurück zu „Eggdrop Support“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast