CentOS - jak korzystać z polecenia ln w tej sytuacji?

0

Utwórz plik taki jak plik dziennika w CentOS, gdy ten plik dziennika zostanie zaktualizowany, wówczas kopia pliku dziennika również zostanie zaktualizowana. Może używam tego polecenia:

ln -s logfile copy_of_logfile

Następnie, gdy dodawana jest zawartość pliku dziennika, dodawana jest również zawartość pliku dziennika_kopii ==> jest OK, ale po usunięciu zawartości pliku dziennika zawartość pliku dziennika_kopii jest również usuwana.

Chcę, żeby tak było, gdy dodawana jest zawartość pliku dziennika, a następnie dodawana jest również zawartość pliku dziennika_kopii, a gdy treść pliku dziennika jest usuwana, chcę, aby treść pliku dziennika_pliku NIE została usunięta. Powiedz mi, jak to zrobić.

TrungTrung
źródło

Odpowiedzi:

1

byłby pomysł na użycie deamon syslogd? W pliku konfiguracyjnym /etc/syslog.conf możesz określić plik (i) dziennika dla swojej aplikacji / ważności itp. Więcej informacji: http://www.centos.org/docs/2/rh-cm-en- 1.0 / s1-software-syslog.html

Petkaux
źródło
+1, ponieważ jest to prawdopodobnie właściwy sposób rozwiązania problemu TrungTrung (choć nie zadawane pytanie).
Hennes,
1
   ln -s logfile copy_of_logfile
   then logfile's content is added, copy_of_logfile's content is also added

Uhm, nie. Jeśli utworzysz softlink, nadal masz tylko jeden plik .
Każde działanie na tym pojedynczym pliku spowoduje podwyższenie obu pozycji katalogu.

Wyjaśnię to na dwóch przykładach:

Przykład 1: To tak, jakbyś utworzył dwa wpisy w książce adresowej telefonu komórkowego z tym samym numerem telefonu. Otrzymujesz ten sam wynik podczas połączenia.

Przykład 2: Korzystanie z książki (indeks to pozycja katalogu)

Przed połączeniem:

Index 
---------------------------------
About the author           Page 1
Index                      Page 2
Hansel and Gretchen        Page 3-10
Sneeuwwitje                Page 11-14
Intentionally left blank   Page 15
About the author.          Page 16
---------------------------------


A po miękkim linkowaniu:

Index 
---------------------------------
About the author           Page 1
Index                      Page 2
Hansel and Gretchen        Page 3-10
Sneeuwwitje                Page 11-14
My copy of Sneeuwwite      See index entry for Sneeuwwite
Intentionally left blank   Page 15
About the author.          Page 16
---------------------------------

W przykładzie historia wciąż kończy się na tych samych stronach. Jeśli edytujesz jedną z historii, obie zostaną zmienione.


Jeśli używasz twardego łącza zamiast miękkiego:

Index 
---------------------------------
About the author           Page 1
Index                      Page 2
Hansel and Gretchen        Page 3-10
Sneeuwwitje                Page 11-14
My copy of Sneeuwwite      Page 11-14
Intentionally left blank   Page 15
About the author.          Page 16
---------------------------------

jest w porządku, ale zawartość pliku dziennika jest usuwana, treść copy_of_logfile jest również usuwana

Tak, ponieważ jest to ten sam plik. To nie jest kopia.

Ponieważ chcesz móc usuwać z jednego pliku bez usuwania z drugiego pliku (kopii), będziesz potrzebować dwóch różnych plików.

Zaloguj się do dwóch plików lub podziel dane wyjściowe za pomocą tee.

Alternatywą jest użycie tail -fdo odczytania wszystkich nowych informacji dodanych do oryginalnego pliku dziennika. (i dodaj to do kopii zapasowej).


Hennes
źródło
To raczej zakrywa trochę trop. Twoja odpowiedź może zawierać wyraźne „Zamiast tego utwórz twardy link”. zdanie gdzieś, najlepiej na początku. (-: Ściśle mówiąc, gdy istnieje łącze twarde, jest jeden plik z dwoma łączami. Gdy istnieje łącze symboliczne, w rzeczywistości są dwa pliki, jeden zwykły plik, a drugi symboliczny.
JdeBP
0

W rzeczywistości istnieje sposób, aby uzyskać to, czego chcesz: działającą kopię danego pliku. Można go uzyskać, tworząc nazwaną rurę ,

   mkfifo mypipe.logfile

który, jak sama nazwa wskazuje, jest plikiem, do którego zostanie zapisany dziennik, a następnie odczytany z niego teepoleceniem, aby wysłać dane wyjściowe do dwóch identycznych plików:

   cat mypipe.logfile | tee -a logfile 1>> copy_of_logfile

Spowoduje to automatyczne wygenerowanie dwóch identycznych plików, które są przechowywane krok po kroku, gdy do każdego z nich dodawany jest nowy materiał.

Jeśli chcesz mieć pewność, że proces nigdy się nie zatrzyma, dodaj whilepętlę,

   while [ true ]; do cat mypipe.logfile | tee -a logfile 1>> copy_log_file; done

Może to być skryptowane, uruchamiane przy rozruchu, odradzane, jeśli chcesz, aby działało wiecznie i tak dalej.

MariusMatutiae
źródło