D1V1N3
Anmeldungsdatum: 29. November 2014
Beiträge: 53
|
Hi Gerne würde ich ein Shellscript erstellen, welches yum update ausführt. Der command gibt entweder auf der letzten Zeile dies hier aus:
No Packages marked for Update Oder das hier:
Transaction Summary
=====================================================================================================================================================================================
Install 2 Package(s)
Upgrade 19 Package(s)
Remove 2 Package(s) bzw ggf: Install 2 Package(s)
Upgrade 126 Package(s)
Remove 2 Package(s)
Reinstall 0 Package(s)
Downgrade 0 Package(s) Ich möchte nun, dass dieser output in ein File geschrieben wird (in eine Zeile). Also entweder so: No Packages marked for Update oder so Install 2 Package(s), Upgrade 126 Package(s), Remove 2 Package(s), Reinstall 0 Package(s), Downgrade 0 Package(s) 1) Wenn yum update ausgeführt und dies angezeigt wird, müsste man zum schluss noch mittels "N" das update abbrechen. Mit yum -y update könnte man automatisch annehmen. Aber ein -n gibt es beim aufrufen nicht. Wenn das Script dann mal via chron eingeplant wird, sollte das ja nicht noch auf den input warten, sondern beendet werden, oder? 2) Wie siehst das Script aus? Verm. noch was mit sed um die Leerzeichen Wegzukriegen, oder? Besten dank für eure Hilfe Bearbeitet von hefeweiz3n:
Falsche Versionsangabe entfernt.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Meinst Du das ernst, dass Du ein Ubuntu- System mit yum updaten willst ? Das wird schief gehen, wenn Du auf diese Weise verschiedene Repositories mischt, vermute ich mal. Ansonsten müsstest Du mal etwas konkreter werden, und vor allem Dein Skript mal mitliefern. LG, track
|
Hefeweiz3n
Moderator, Webteam
Anmeldungsdatum: 15. Juli 2006
Beiträge: 5813
Wohnort: Ankh-Morpork
|
Unabhängig davon das du definitiv kein Ubuntu nutzt, hier ein paar Hinweise zu den Tools die du brauchst:
Pipen von einem Befehl in den nächsten Umleiten mit >> in eine Datei tail um die letzten Zeilen zu bekommen sed oder awk um die Zeilenumbrüche durch normale Leerzeichen o.ä. zu ersetzen um das ganze auf eine Zeile zu bekommen
Zu den yum-Spezifischen Sachen wird man dir hier wohl eher weniger weiterhelfen können.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
D1V1N3 schrieb:
Gerne würde ich ein Shellscript erstellen, welches yum update ausführt. Der command gibt entweder auf der letzten Zeile dies hier aus:
No Packages marked for Update
Wird das auf Stdout oder Stderr ausgegeben?
1) Wenn yum update ausgeführt und dies angezeigt wird, müsste man zum schluss noch mittels "N" das update abbrechen. Mit yum -y update könnte man automatisch annehmen. Aber ein -n gibt es beim aufrufen nicht. Wenn das Script dann mal via chron eingeplant wird, sollte das ja nicht noch auf den input warten, sondern beendet werden, oder?
Du solltest einfach yum check-update nutzen. Ggf. kannst Du auch die Eingabe schließen (und hoffen, dass yum dann kein "y" annimmt).
2) Wie siehst das Script aus? Verm. noch was mit sed um die Leerzeichen Wegzukriegen, oder?
Dafür würde ich paste nehmen: | yum update ... | sed -ne '/No Packages marked for Update/ p;/^Install.*Package(s)$/,$ p' | paste -sd ', '
|
(ungetestet)
|
D1V1N3
(Themenstarter)
Anmeldungsdatum: 29. November 2014
Beiträge: 53
|
Hallo und schonmal danke an alle anworten. Ja, ist nicht für ubuntu, deshalb yum. Da ich das forum hier aber so super finde und es um scripts geht, habe ich mich dennoch getraut hier zu posten. Die frage ist ja eig. auch nicht distro spezifisch, bzw. es geht ja nur um den output. yum check-update → Ja, an das habe ich auch gedacht. Dies gibt aber einen anderen, nicht passenden output zurück. No Packages marked for Update → Das ist die normale Std Ausgabe bzw. die letzte Zeile davon (wenn es keine Updates gibt) yum update ... | sed -ne '/No Packages marked for Update/ p;/^Install.*Package(s)$/,$ p' | paste -sd ', '
Das ist schon nahe dran. Es liefert folgenden Output:
Install 22 Package(s),Upgrade 591 Package(s) ,Total download size: 769 M Is this ok [y/N]: Exiting on user Command
Wenn dieser nun so aussehen würde, wäre das perfekt:
Install 22 Package(s), Upgrade 591 Package(s) Das ganze würde ich dann gerne jeweils in das gleiche Textfile schreiben und den bestehenden text löschen. D.h. ich müsste hinter den command noch > /var/log/textdate hinzufügen, oder?
Super wäre es, wenn die Zeile so aussehen würde: Install 22 Package(s), Upgrade 591 Package(s) stand 22.06.2015 15:00
Also dahinter noch das aktuelle Datum bzw Zeit. Das man nach dem ausführen des commands ein "Y" oder "N" drücken müsste das es weiter geht, stellt kein Problem dar? Nicht das da mit der Zeit div. offene Prozesse rumhängen....
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
D1V1N3 schrieb: Hallo und schonmal danke an alle anworten.
Bitte zitiere ordentlich.
Wenn dieser nun so aussehen würde, wäre das perfekt:
Install 22 Package(s), Upgrade 591 Package(s)
Dann selektiere halt anders, z.B.: | yum ... \
| egrep '^(No Packages marked for Update|(Install|Upgrade|...)[[:space:]]+[0-9]+ Package\(s\))$' \
| sed -e 's# *# #' \
| paste -sd ', '
|
(Ellipsen entsprechend füllen)
Das ganze würde ich dann gerne jeweils in das gleiche Textfile schreiben und den bestehenden text löschen. D.h. ich müsste hinter den command noch > /var/log/textdate hinzufügen, oder?
Super wäre es, wenn die Zeile so aussehen würde: Install 22 Package(s), Upgrade 591 Package(s) stand 22.06.2015 15:00
Also dahinter noch das aktuelle Datum bzw Zeit.
Du willst Englisch und Deutsch mischen? Das sieht aber seltsam aus.
Das man nach dem ausführen des commands ein "Y" oder "N" drücken müsste das es weiter geht, stellt kein Problem dar? Nicht das da mit der Zeit div. offene Prozesse rumhängen....
Siehe meine frühere Bemerkung.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
D1V1N3 schrieb: Install 22 Package(s),Upgrade 591 Package(s) ,Total download size: 769 M Is this ok [y/N]: Exiting on user Command
Wenn dieser nun so aussehen würde, wäre das perfekt: Install 22 Package(s), Upgrade 591 Package(s)
Falls Dein Beispiel exakt so stimmt, reicht dafür ein simpler sed- Befehl: track@lucid:~$ echo 'Install 22 Package(s),Upgrade 591 Package(s) ,Total download size: 769 M Is this ok [y/N]: Exiting on user Command' | sed 's/ \+/ /g; s/ ,T.*//'
Install 22 Package(s),Upgrade 591 Package(s) LG, track
|
D1V1N3
(Themenstarter)
Anmeldungsdatum: 29. November 2014
Beiträge: 53
|
Du willst Englisch und Deutsch mischen? Das sieht aber seltsam aus.
Nein, da hast du recht. Das man nach dem ausführen des commands ein "Y" oder "N" drücken müsste das es weiter geht, stellt kein Problem dar? Nicht das da mit der Zeit div. offene Prozesse rumhängen....
Siehe meine frühere Bemerkung.
Ja, aber yum check gibt wie gesagt nicht den selben output. Deshalb muss ich yum update verwenden.
Ist es dann kein Problem, dass das Script dann bei der Anfragen [y,N] nicht weitermacht? Vielen dank für eure Beispiele! Leider haben diese nicht wie gewünscht funktioniert 😢 yum update | sed 's/ \+/ /g; s/ ,T.*//'
bzw
yum update | sed 's/ \+/ /g; s/ ,T.*//' > output.txt
Geht beides nicht: Bleibt stehen und gibt nichts aus. Das selbe leider auch hier:
yum update | egrep '^(No Packages marked for Update|(Install|Upgrade|Remove)[[:space:]]+[0-9]+ Package\(s\))$' | sed -e 's# *# #' | paste -sd ', ' Ev. mal hier der komplette text, wenn es updates gibt: [root@r01vm015ux240 ~]# yum update
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Update Process
Loading mirror speeds from cached hostfile
* base: centos.bio.lmu.de
* extras: centos.bio.lmu.de
* updates: centos.bio.lmu.de
Resolving Dependencies
--> Running transaction check
---> Package cairo.x86_64 0:1.8.8-3.1.el6 will be updated
---> Package cairo.x86_64 0:1.8.8-6.el6_6 will be an update
---> Package mysql.x86_64 0:5.1.73-3.el6_5 will be updated
---> Package mysql.x86_64 0:5.1.73-5.el6_6 will be an update
---> Package mysql-devel.x86_64 0:5.1.73-3.el6_5 will be updated
---> Package mysql-devel.x86_64 0:5.1.73-5.el6_6 will be an update
---> Package mysql-libs.x86_64 0:5.1.73-3.el6_5 will be updated
---> Package mysql-libs.x86_64 0:5.1.73-5.el6_6 will be an update
---> Package mysql-server.x86_64 0:5.1.73-3.el6_5 will be updated
---> Package mysql-server.x86_64 0:5.1.73-5.el6_6 will be an update
---> Package nfs-utils-lib.x86_64 0:1.1.5-9.el6 will be updated
---> Package nfs-utils-lib.x86_64 0:1.1.5-9.el6_6 will be an update
---> Package selinux-policy.noarch 0:3.7.19-260.el6_6.3 will be updated
---> Package selinux-policy.noarch 0:3.7.19-260.el6_6.5 will be an update
---> Package selinux-policy-targeted.noarch 0:3.7.19-260.el6_6.3 will be updated
---> Package selinux-policy-targeted.noarch 0:3.7.19-260.el6_6.5 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
===========================================================================================================================================================================================================
Package Arch Version Repository Size
===========================================================================================================================================================================================================
Updating:
cairo x86_64 1.8.8-6.el6_6 updates 309 k
mysql x86_64 5.1.73-5.el6_6 updates 894 k
mysql-devel x86_64 5.1.73-5.el6_6 updates 129 k
mysql-libs x86_64 5.1.73-5.el6_6 updates 1.2 M
mysql-server x86_64 5.1.73-5.el6_6 updates 8.6 M
nfs-utils-lib x86_64 1.1.5-9.el6_6 updates 68 k
selinux-policy noarch 3.7.19-260.el6_6.5 updates 864 k
selinux-policy-targeted noarch 3.7.19-260.el6_6.5 updates 3.0 M
Transaction Summary
===========================================================================================================================================================================================================
Upgrade 8 Package(s)
Total download size: 15 M
Is this ok [y/N]:
Wenn es keine updates gibt, sieht der komplette output so aus:
[root@r01vm015ux240 ~]# yum update
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Update Process
Loading mirror speeds from cached hostfile
* base: centos.bio.lmu.de
* extras: centos.bio.lmu.de
* updates: centos.bio.lmu.de
No Packages marked for Update Ziel ist wie geschrieben, den dass der output so:
No Packages marked for Update - "aktuelles Datum/Zeit" bzw:
Install 2 Package(s), Upgrade 126 Package(s), Remove 2 Package(s) - "aktuelles Datum/Zeit"
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
D1V1N3 schrieb:
Das man nach dem ausführen des commands ein "Y" oder "N" drücken müsste das es weiter geht, stellt kein Problem dar? Nicht das da mit der Zeit div. offene Prozesse rumhängen....
Siehe meine frühere Bemerkung.
Ja, aber yum check gibt wie gesagt nicht den selben output. Deshalb muss ich yum update verwenden.
Ist es dann kein Problem, dass das Script dann bei der Anfragen [y,N] nicht weitermacht?
Hast Du versucht, die Eingabe zu schließen? Alternativ einfach echo n | davor setzen.
Das selbe leider auch hier:
yum update | egrep '^(No Packages marked for Update|(Install|Upgrade|Remove)[[:space:]]+[0-9]+ Package\(s\))$' | sed -e 's# *# #' | paste -sd ', '
s.o.
|
D1V1N3
(Themenstarter)
Anmeldungsdatum: 29. November 2014
Beiträge: 53
|
Meine Helden! Hat so funktioniert, besten Dank an alle! 👍
echo -n | yum update | egrep '^(No Packages marked for Update|(Install|Upgrade|Remove)[[:space:]]+[0-9]+ Package\(s\))$' | sed -e 's# *# #' | paste -sd ', ' Hab das Ganze noch wie folgt erweitert:
echo -n | yum update | egrep '^(No Packages marked for Update|(Install|Upgrade|Remove)[[:space:]]+[0-9]+ Package\(s\))$' | sed -e 's# *# #' | paste -sd ', ' > beh_tmp.txt && date +%m-%d_%H:%M>> beh_tmp.txt
Das Datum wird jetzt aber in einer neuen Zeile angehängt. Wie kann ich den Text auf die gleiche Zeile bringen?
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
D1V1N3 schrieb: Meine Helden! Hat so funktioniert, besten Dank an alle! 👍
echo -n | yum update | egrep '^(No Packages marked for Update|(Install|Upgrade|Remove)[[:space:]]+[0-9]+ Package\(s\))$' | sed -e 's# *# #' | paste -sd ', '
Das ist nicht das, was ich vorgeschlagen habe. Merke: echo -n ist nicht dasselbe wie echo n .
|
ExcitedSpoon
Anmeldungsdatum: 17. Juli 2010
Beiträge: 226
Wohnort: /home/berlin
|
D1V1N3 schrieb: Das Datum wird jetzt aber in einer neuen Zeile angehängt. Wie kann ich den Text auf die gleiche Zeile bringen?
Wenn der output nur aus einer Zeile besteht, dann so:
| sed -i "s/$/ $(date +%m-%d_%H:%M)/" beh_tmp.txt
|
|
D1V1N3
(Themenstarter)
Anmeldungsdatum: 29. November 2014
Beiträge: 53
|
ExcitedSpoon Nein, sind mehrere Zeilen. Aber ich denke ein > /location/input.txt wird gehen. rklm Oh, sorry, das habe ich übersehen und auf "echo n" angepasst. Hab gesehen, dass es auch noch den output "Aktualisieren 2 Pakete" geben kann. Dieser wird aber nicht abgefangen: echo n | yum update | egrep '^(No [pP]ackages marked for [uU]pdate|(Install|Upgrade|Remove)[[:space:]]+[0-9]+ Package\(s\))$' | sed -e 's# *# #' | paste -sd ', ' > /var/scripts/linux/motd/os_update_infos.txt Hab gedacht, ich könnte dies einfach wie folgt ergänzen: echo n | yum update | egrep '^(No [pP]ackages marked for [uU]pdate|(Install|Upgrade|Remove|Aktualisieren)[[:space:]]+[0-9]+ Package\(s\))$' | sed -e 's# *# #' | paste -sd ', ' > /var/scripts/linux/motd/os_update_infos.txt Leider wird das aktualisieren nicht abgefangen. Was mache ich da noch falsch?
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
D1V1N3 schrieb:
Hab gesehen, dass es auch noch den output "Aktualisieren 2 Pakete" geben kann. Dieser wird aber nicht abgefangen:
Dann solltest Du die Locale fix setzen, damit die Sprache sich nicht ändert. Also z.B. | echo n | LANG=en_US.UTF-8 yum update | ...
|
Leider wird das aktualisieren nicht abgefangen. Was mache ich da noch falsch?
Was meinst Du damit?
|
D1V1N3
(Themenstarter)
Anmeldungsdatum: 29. November 2014
Beiträge: 53
|
rklm schrieb: D1V1N3 schrieb:
Hab gesehen, dass es auch noch den output "Aktualisieren 2 Pakete" geben kann. Dieser wird aber nicht abgefangen:
Dann solltest Du die Locale fix setzen, damit die Sprache sich nicht ändert. Also z.B.
| echo n | LANG=en_US.UTF-8 yum update | ...
|
Ok, danke Leider wird das aktualisieren nicht abgefangen. Was mache ich da noch falsch?
Was meinst Du damit?
Es gibt die verschiedenen Ausgabemöglichkeiten (siehe Text oben, z.b. Install, Upgrade etc). Dabei wurde aber die Möglichkeit "Aktualisieren XY Pakete" vergessen. Eine mögliche Ausgabe wäre z.B.
Aktualisieren 2 Pakete
Ich wollte es einfach mittels |Aktualisieren (siehe Unten) erweitern. Das hat aber nicht funktioniert.....
|