Diskstation soll CPU und RAM Auslastung twittern

Status
Für weitere Antworten geschlossen.

niklasR

Benutzer
Mitglied seit
16. Jun 2010
Beiträge
220
Punkte für Reaktionen
0
Punkte
0
Erstmal vorweg: Hab dazu keinen Thread gefundne, also mach ich einen neuen auf; sollte es einen geben, einfach Link, Danke.

Ich möchte, dass meine DS CPU-Auslastung und RAM (evtl. noch mehr, aber darum gehts jetzt grade) twittert. Bin schon soweit, dass ein simpler curl Befehl ausreicht, um zu twittern, hab das auch gestestet:
Rich (BBCode):
curl -u InderLust:xxxxxxx -d "status=Bis zu 140 Zeichen hier einfügen" http://xxx/update.xml

Ich wollte dann irgendwie ein .sh-Skript schreiben, das alle 5 min. per Cronjob aufgerufen wird, und twittert. Hab leider keine Ahnung davon, wie ich die CPU-Auslastung darein bekomme… *pfeif*

Ich bin zuversichtlich, dass mir jemand helfen kann…
 

ubuntulinux

Benutzer
Mitglied seit
23. Jan 2010
Beiträge
2.063
Punkte für Reaktionen
0
Punkte
82
synology> top -b -n1 | grep CPU
CPU: 0.0% usr 0.0% sys 0.0% nic 100% idle 0.0% io 0.0% irq 0.0% sirq


musst also in deinem Befehl etwas wie

curl... `top -b -n1 | grep CPU`

drin haben.
 

niklasR

Benutzer
Mitglied seit
16. Jun 2010
Beiträge
220
Punkte für Reaktionen
0
Punkte
0
Danke

Und fertig!

Rich (BBCode):
#!/bin/sh
#CPU-Auslastung in $msg schreiben
msg="`top -b -n1 | grep CPU | cut -c 1-10`"
msg=`echo $msg | cut -c 1-10`

#RAM anhängen
used=`free | grep Total: | cut -c 23-38`
used=`echo "scale=2; ${used} /1024" | bc -l`
percentage_used=`echo "scale=2; ${used} /(515660 /1024) *100" | bc -l`

msg="`echo $msg`; RAM: ${used}MB (${percentage_used}%) "

#Sonderzeichen umwandeln
echo $msg | sed -e 's/%/%25/g' -e 's/ /%20/g' -e 's/!/%21/g' -e 's/"/%22/g' -e 's/#/%23/g' -e 's/\$/%24/g' -e 's/\&/%26/g' -e 's/'\''/%27/g' -e 's/(/%28/g' -e 's/)/%29/g' -e 's/\*/%2a/g' -e 's/+/%2b/g' -e 's/,/%2c/g' -e 's/-/%2d/g' -e 's/\./%2e/g' -e 's/\//%2f/g' -e 's/:/%3a/g' -e 's/;/%3b/g' -e 's//%3e/g' -e 's/?/%3f/g' -e 's/@/%40/g' -e 's/\[/%5b/g' -e 's/\\/%5c/g' -e 's/\]/%5d/g' -e 's/\^/%5e/g' -e 's/_/%5f/g' -e 's/`/%60/g' -e 's/{/%7b/g' -e 's/|/%7c/g' -e 's/}/%7d/g' -e 's/~/%7e/g' > /tmp/IdL_status
msg=`cat /tmp/IdL_status`

#Posten
curl -u InderLust:xxxxx -d "status=${msg}" http://xxxxx/update.xml

Wenn der cronjob jetzt ordentlich läuft, düfte ich CPU- und RAM-Auslastung jede Minute online sehen können :)

Achja, ihr wollt ja immer ne Lizenz, gell? Dann nehm ich mal die CC BY-NC 3.0. Geht das bei Code? Ich kenne mich da nicht so aus…
 
Zuletzt bearbeitet:

niklasR

Benutzer
Mitglied seit
16. Jun 2010
Beiträge
220
Punkte für Reaktionen
0
Punkte
0
Cron spielt verrückt :S

So. Moin.
Hab mein kript noch etwas erweitert und aufgeräumt, sodass auch Speicher und Uptime getwittert werden:

Rich (BBCode):
#!/bin/sh

#CPU-Auslastung in $cpu schreiben
cpu=`top -b -n1 | grep Cpu | cut -c 9-12`

#RAM anhängen
ram_used=`free | grep Mem: | awk '{print $3}'`
ram_used=`echo "scale=2; ${ram_used} /1024" | bc -l`
percentage_used=`echo "scale=2; ${ram_used} /(515660 /1024) *100" | bc -l`

#Uptime
uptime=`uptime | awk '{print $3}'`

#Speicher
size=`df -h | grep /opt | awk '{print $1}'`
used=`df -h | grep /opt | awk '{print $2}'`
used_percentage=`df -h | grep /opt | awk '{print $4}'`
available=`df -h | grep /opt | awk '{print $3}'`

#Nachricht zusammenstellen
msg="CPU: ${cpu}%; RAM: ${ram_used}MB (${percentage_used}%); Von ${size}B ${used}B (${used_percentage}) benutzt (${available}B frei); Uptime: ${uptime} `date`"

#Sonderzeichen umwandeln
echo $msg | sed -e 's/%/%25/g' -e 's/ /%20/g' -e 's/!/%21/g' -e 's/"/%22/g' -e 's/#/%23/g' -e 's/\$/%24/g' -e 's/\&/%26/g' -e 's/'\''/%27/g' -e 's/(/%28/g' -e 's/)/%29/g' -e 's/\*/%2a/g' -e 's/+/%2b/g' -e 's/,/%2c/g' -e 's/-/%2d/g' -e 's/\./%2e/g' -e 's/\//%2f/g' -e 's/:/%3a/g' -e 's/;/%3b/g' -e 's//%3e/g' -e 's/?/%3f/g' -e 's/@/%40/g' -e 's/\[/%5b/g' -e 's/\\/%5c/g' -e 's/\]/%5d/g' -e 's/\^/%5e/g' -e 's/_/%5f/g' -e 's/`/%60/g' -e 's/{/%7b/g' -e 's/|/%7c/g' -e 's/}/%7d/g' -e 's/~/%7e/g' > /tmp/IdL_status
msg=`cat /tmp/IdL_status`

#Posten
curl -u InderLust:supertweet12b -d "status=${msg}" http://api.supertweet.net/1/statuses/update.xml

Soweit so gut. Wenn ich das manuell ausführe, klappt auch alles, und folgendes wird getwittert:
CPU: 69.0%; RAM: 480.78MB (95.00%); Von 3.2TB 2.2TB (70%) benutzt (960GB frei); Uptime: 1:10, Mon Apr 18 13:12:25 CEST 2011

Lasse ich den cron das machen, kommt allerdings nur Schwachfug bei twitter an:
CPU: 507 %; RAM: MB (%); Von /volume1/@optwareB 3.1TB (959.5G) benutzt (2.2TB frei); Uptime: 1:11, Mon Apr 18 13:13:01 CEST 2011

Was mache ich falsch? Holt der cron die Befehle irgendwie anders ab? Ich verstehe es nicht :S
Und ja, in der crontab ist exakt das Skript eingetragen, dass ich manuell per ssh auf der Konsole ausführe.

PS: Hat noch jemand nen Tipp, wie ich die Sonderzeichen direkt umgewnadelt gehe, ohne den Umweg über die temp-Datei gehen zu müssen? Ich bin da etwas verwirrt ;)
 
Zuletzt bearbeitet:

Wessix

Benutzer
Mitglied seit
14. Okt 2010
Beiträge
328
Punkte für Reaktionen
0
Punkte
22
CPU Auslastung 507% !! Wow du bist ja voll der mega tuner!
pass blos auf dass du keine Kernschmelze riskierst.

- Dieser Beitrag ist nicht zu 100,000 % ernst gemeint :)
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
cron hat eine andere Umgebung als die normale Shell. Nur weil was auf der Shell geht muss es als cronjob deswegen noch lange nicht gehen. Meist liegen Probleme daran, dass cron einen anderen PATH hat und damit bestimmte Kommandos nicht findest resp an einem anderen Ort findet. Probier mal für alle Kommandos die komplette Pfadangabe zu benutzen
 

niklasR

Benutzer
Mitglied seit
16. Jun 2010
Beiträge
220
Punkte für Reaktionen
0
Punkte
0
Manchmal geht's sogar auf über 900% hoch! Aber die DS steht im Keller, da sollte es kühl genug sein, um einen GAU auf INES Stufe 7 abwenden zu können ;)
@jahlives Ich's probier mal. Das wusste ich gar nicht, Danke.
 

niklasR

Benutzer
Mitglied seit
16. Jun 2010
Beiträge
220
Punkte für Reaktionen
0
Punkte
0
Danke, jahlives. Ich hab alle Pfade durch die jeweiligen which $name ersetzt, und jetzt klappt es. Und wieder ein Stück schlauer ;)

Rich (BBCode):
#!/bin/sh
#Twitter-Skript von niklasR

#CPU-Auslastung in $cpu schreiben
cpu=`/opt/bin/top -b -n1 | /bin/grep Cpu | /opt/bin/cut -c 9-12`

#RAM anhängen
ram_used=`/opt/bin/free | /bin/grep Mem: | /usr/bin/awk '{print $3}'`
ram_used=`/opt/bin/echo "scale=2; ${ram_used} /1024" | /opt/bin/bc -l`
percentage_used=`/opt/bin/echo "scale=2; ${ram_used} /(515660 /1024) *100" | /opt/bin/bc -l`

#Uptime
uptime=`/opt/bin/uptime | /usr/bin/awk '{print $3}'`

#Speicher
size=`/opt/bin/df -h | /bin/grep /opt | /usr/bin/awk '{print $1}'`
used=`/opt/bin/df -h | /bin/grep /opt | /usr/bin/awk '{print $2}'`
used_percentage=`/opt/bin/df -h | /bin/grep /opt | /usr/bin/awk '{print $4}'`
available=`/opt/bin/df -h | /bin/grep /opt | /usr/bin/awk '{print $3}'`

#Nachricht zusammenstellen
msg="CPU: ${cpu}%; RAM: ${ram_used}MB (${percentage_used}%); Von ${size}B ${used}B (${used_percentage}) benutzt (${available}B frei); Uptime: ${uptime} `date`"

#Sonderzeichen umwandeln
/opt/bin/echo $msg | /bin/sed -e 's/%/%25/g' -e 's/ /%20/g' -e 's/!/%21/g' -e 's/"/%22/g' -e 's/#/%23/g' -e 's/\$/%24/g' -e 's/\&/%26/g' -e 's/'\''/%27/g' -e 's/(/%28/g' -e 's/)/%29/g' -e 's/\*/%2a/g' -e 's/+/%2b/g' -e 's/,/%2c/g' -e 's/-/%2d/g' -e 's/\./%2e/g' -e 's/\//%2f/g' -e 's/:/%3a/g' -e 's/;/%3b/g' -e 's//%3e/g' -e 's/?/%3f/g' -e 's/@/%40/g' -e 's/\[/%5b/g' -e 's/\\/%5c/g' -e 's/\]/%5d/g' -e 's/\^/%5e/g' -e 's/_/%5f/g' -e 's/`/%60/g' -e 's/{/%7b/g' -e 's/|/%7c/g' -e 's/}/%7d/g' -e 's/~/%7e/g' > /tmp/IdL_status
msg=`/opt/bin/cat /tmp/IdL_status`

#Posten
/opt/bin/curl -u InderLust:xxxxxxxx -d "status=${msg}" http://xxxxxxx/update.xml

PS: Steht im Wiki.
 
Zuletzt bearbeitet:

wawibu

Benutzer
Mitglied seit
11. Aug 2010
Beiträge
11
Punkte für Reaktionen
0
Punkte
1
Fand die Idee irgendwie interessant und habe daher das Script nun auch auf meiner Syno.

Leider habe ich das Problem, dass es nur hin und wieder klappt. Meistens erhalte ich von SuperTweet die Meldung, dass der User unkown ist. Dann klappt es mal wieder, ohne dass ich etwas geändert hätte.

Jemand eine Idee woran das liegen kann?

Danke!
 

persching

Benutzer
Mitglied seit
13. Jan 2012
Beiträge
77
Punkte für Reaktionen
0
Punkte
6
Ich wollte die twitter.sh ändern und zwar, dass sich die Message anders zusammensetzt. Wenn ich aber im Admintool die Datei editiere und speichere hat das keine Auswirkungen auf die Twitterausgabe. Muss man da noch was beachten?

Hier ist meine twitter.sh:

#!/bin/sh
#Twitter-Skript von niklasR

#CPU-Auslastung in $cpu schreiben
cpu=`/opt/bin/top -b -n1 | /bin/grep Cpu | /opt/bin/cut -c 9-12`

#RAM anhängen
ram_total=`/opt/bin/free -m | /bin/grep Mem: | /usr/bin/awk '{print $2}'`
ram_used=`/opt/bin/free -m | /bin/grep cache: | /usr/bin/awk '{print $3}'`
percentage_used=`/opt/bin/echo "scale=2; ${ram_used} /${ram_total} *100" | /opt/bin/bc -l`


#Uptime
uptime=`/opt/bin/uptime | /usr/bin/awk '{print $3}'`

#Speicher
size=`/opt/bin/df -h | /bin/grep /opt | /usr/bin/awk '{print $1}'`
used=`/opt/bin/df -h | /bin/grep /opt | /usr/bin/awk '{print $2}'`
used_percentage=`/opt/bin/df -h | /bin/grep /opt | /usr/bin/awk '{print $4}'`
available=`/opt/bin/df -h | /bin/grep /opt | /usr/bin/awk '{print $3}'`

#Nachricht zusammenstellen
msg="'date' CPU: ${cpu}%; RAM: ${ram_used}MB (${percentage_used}%); (${used}B)/(${size}B) (${used_percentage}) benutzt (${available}B frei); Uptime: ${uptime}"
#Sonderzeichen umwandeln
/opt/bin/echo $msg | /bin/sed -e 's/%/%25/g' -e 's/ /%20/g' -e 's/!/%21/g' -e 's/"/%22/g' -e 's/#/%23/g' -e 's/\$/%24/g' -e 's/\&/%26/g' -e 's/'\''/%27/g' -e 's/(/%28/g' -e 's/)/%29/g' -e 's/\*/%2a/g' -e 's/+/%2b/g' -e 's/,/%2c/g' -e 's/-/%2d/g' -e 's/\./%2e/g' -e 's/\//%2f/g' -e 's/:/%3a/g' -e 's/;/%3b/g' -e 's//%3e/g' -e 's/?/%3f/g' -e 's/@/%40/g' -e 's/\[/%5b/g' -e 's/\\/%5c/g' -e 's/\]/%5d/g' -e 's/\^/%5e/g' -e 's/_/%5f/g' -e 's/`/%60/g' -e 's/{/%7b/g' -e 's/|/%7c/g' -e 's/}/%7d/g' -e 's/~/%7e/g' > /tmp/IdL_status
msg=`/opt/bin/cat /tmp/IdL_status`

#Posten
/opt/bin/curl -u MeinBenutzer:MeinPasswort -d "status=${msg}" http://api.supertweet.net/1/statuses/update.xml
 
Zuletzt bearbeitet:

Solidus

Benutzer
Mitglied seit
05. Sep 2012
Beiträge
14
Punkte für Reaktionen
0
Punkte
0
Bin ich zu alt oder das Skript?

Moin moin,

ich habe das Skript installiert, wie im Wiki beschrieben... es wird jedoch keine Nachricht zusammengestellt wenn ich das Skript ausführe? Dafür erhalte ich folgende Fehlermeldung in der Konsole:

Rich (BBCode):
./twitter.sh: line 5: /opt/bin/cut: not found
./twitter.sh: line 10: /opt/bin/echo: not found
./twitter.sh: line 10: /opt/bin/bc: not found
./twitter.sh: line 17: /opt/bin/df: not found
./twitter.sh: line 18: /opt/bin/df: not found
./twitter.sh: line 19: /opt/bin/df: not found
./twitter.sh: line 20: /opt/bin/df: not found
./twitter.sh: line 25: /opt/bin/echo: not found
./twitter.sh: line 26: /opt/bin/cat: not found
{"errors":[{"code":170,"message":"Missing required parameter: status"}

Das Skript sieht wie folgt aus (ausgenommen Benutzer:passwort):

Rich (BBCode):
#!/bin/sh
#Twitter-Skript von niklasR

#CPU-Auslastung in $cpu schreiben
cpu=`/opt/bin/top -b -n1 | /bin/grep Cpu | /opt/bin/cut -c 9-12`

#RAM anhängen
ram_total=`/opt/bin/free -m | /bin/grep Mem: | /usr/bin/awk '{print $2}'`
ram_used=`/opt/bin/free -m | /bin/grep cache: | /usr/bin/awk '{print $3}'`
percentage_used=`/opt/bin/echo "scale=2; ${ram_used} /${ram_total} *100" | /opt/bin/bc -l`


#Uptime
uptime=`/opt/bin/uptime | /usr/bin/awk '{print $3}'`

#Speicher
size=`/opt/bin/df -h | /bin/grep /opt | /usr/bin/awk '{print $1}'`
used=`/opt/bin/df -h | /bin/grep /opt | /usr/bin/awk '{print $2}'`
used_percentage=`/opt/bin/df -h | /bin/grep /opt | /usr/bin/awk '{print $4}'`
available=`/opt/bin/df -h | /bin/grep /opt | /usr/bin/awk '{print $3}'`

#Nachricht zusammenstellen
msg="CPU: ${cpu}%; RAM: ${ram_used}MB (${percentage_used}%); Von ${size}B ${used}B (${used_percentage}) benutzt (${available}B frei); Uptime: ${uptime} `date`"
#Sonderzeichen umwandeln
/opt/bin/echo $msg | /bin/sed -e 's/%/%25/g' -e 's/ /%20/g' -e 's/!/%21/g' -e 's/"/%22/g' -e 's/#/%23/g' -e 's/\$/%24/g' -e 's/\&/%26/g' -e 's/'\''/%27/g' -e 's/(/%28/g' -e 's/)/%29/g' -e 's/\*/%2a/g' -e 's/+/%2b/g' -e 's/,/%2c/g' -e 's/-/%2d/g' -e 's/\./%2e/g' -e 's/\//%2f/g' -e 's/:/%3a/g' -e 's/;/%3b/g' -e 's//%3e/g' -e 's/?/%3f/g' -e 's/@/%40/g' -e 's/\[/%5b/g' -e 's/\\/%5c/g' -e 's/\]/%5d/g' -e 's/\^/%5e/g' -e 's/_/%5f/g' -e 's/`/%60/g' -e 's/{/%7b/g' -e 's/|/%7c/g' -e 's/}/%7d/g' -e 's/~/%7e/g' > /tmp/IdL_status
msg=`/opt/bin/cat /tmp/IdL_status`

#Posten
/opt/bin/curl -u XXX:XXX -d "status=${msg}" http://api.supertweet.net/1.1/statuses/update.json

Also ich verstehe soweit, dass die Pfade nicht korrekt sind? Fehlt mir jetzt was auf der Syno oder muss das Skript überarbeitet werden?

Danke für Eure Zeit
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
du hast das IPKG (/opt) für deine DS installiert und dazu die wichtigsten IPKG-Pakete ???

Itari
 

Solidus

Benutzer
Mitglied seit
05. Sep 2012
Beiträge
14
Punkte für Reaktionen
0
Punkte
0
Hallo itari,

IPKG ist installiert mit den Paketen:
libcurl
ncurses
openssl
procps
wget
zlib

Das mit (/opt) verstehe ich nicht ganz? Du meinst als Installationsort? Ich glaube schon... Auszug aus dem Verzeichnis /opt:
Rich (BBCode):
drwxr-xr-x   11 root     root          4096 Jun 29 22:57 .
drwxr-xr-x   25 root     root          4096 Jun 28 08:09 ..
drwxr-xr-x    2 root     root          4096 Jun 28 10:59 bin
drwxr-xr-x    4 root     root          4096 Dec 27  2012 etc
drwxr-xr-x    2 root     root          4096 Jun 28 10:59 include
drwx------    2 root     root          4096 Dec 27  2012 ipkg-3IvlQC
drwxr-xr-x    3 root     root          4096 Jun 28 10:59 lib
drwxr-xr-x    3 root     root          4096 Dec 27  2012 man
drwxr-xr-x    8 root     root          4096 Jun 28 10:59 share
drwxr-xr-t    2 root     root          4096 May 15  2010 tmp
drwxr-xr-x    3 root     root          4096 Dec 27  2012 var

Was mir fehlt ist scheinbar unter /opt/bin/ der Verweis oder das Programm(?) cut (sowie die anderen Verzeichnisse aus der Fehlermeldung). Ich habe mal über das IPKG-gui gesucht, aber aus den Ergebnissen werde ich nicht ganz schlau :-/

Danke für die Hilfe :D
 

Anhänge

  • Bildschirmfoto vom 2013-06-29 22:54:56.jpg
    Bildschirmfoto vom 2013-06-29 22:54:56.jpg
    22,7 KB · Aufrufe: 38
Zuletzt bearbeitet:

Solidus

Benutzer
Mitglied seit
05. Sep 2012
Beiträge
14
Punkte für Reaktionen
0
Punkte
0
Hallo nochmal,

könnte es daran liegen, dass ich IPKG "nur" über das Paket installiert habe? Den Rest habe ich auch nicht über das Admintool, sondern über die Konsole (ssh, vi usw) gemacht...
 

niklasR

Benutzer
Mitglied seit
16. Jun 2010
Beiträge
220
Punkte für Reaktionen
0
Punkte
0
Hi,
hast du die Befehle denn so auf der Kommandozeile, wenn du dich per SSH einloggst? Wenn ja, schau doch mal mit whereis (im ipkg-Paket util-linux) die einzelne Pfade nach, und ersetze die, ob das hilft. Ich selber benutze das Skript gar nicht mehr; hab aber grade mal bei mir geschaut, und da sind die Programme auch nicht mehr über optware eingebunden, sondern direkt im System; da müsste ggf. das ganze Skript mal überarbeitet werden..

Ich weiß auch nicht mehr, warum ich die opt-Programme genommen habe; ob meine DS einfach so konfiguriert war, oder ob es die normal nicht gab (das dürften ja noch DSM 3.x-Zeiten gewesen sein, oder?), oder ob die normalen einfach das gemacht haben, was die machen sollten…
 

Solidus

Benutzer
Mitglied seit
05. Sep 2012
Beiträge
14
Punkte für Reaktionen
0
Punkte
0
Moin niklasR,

das mit whereis war eine gute Idee (musste ich natürlich auch nachinstallieren). Die meisten Programme sind von /opt/bin nach /usr/bin gewandert. Wahrscheinlich im Zuge der Aktualisierung auf DSM 4.x? Weiterhin fehlte meiner DS auch noch der binary calculator (bc). Die Statusmeldung wird ausgegeben, jedoch läuft die CPU der DS jetzt auch mit 990% :D

Ich bin also auf dem richtigen Weg. Sobald ich das Skript überarbeitet habe, kann ich das ja noch mal posten :)

Danke das Du Dir die Zeit genommen hast.


Grüße
Solidus
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat