abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 00:22 | Zajímavý článek

    Na blogu programovacího jazyka Swift byl publikován příspěvek Psaní aplikací pro GNOME v programovacím jazyce Swift. Používá se Adwaita pro Swift.

    Ladislav Hagara | Komentářů: 1
    včera 17:44 | Zajímavý software

    egui je GUI knihovna pro programovací jazyk Rust běžící na webu i nativně. Vydána byla verze 0.27.0.

    Ladislav Hagara | Komentářů: 0
    včera 16:22 | Nová verze

    Byla vydána nová verze 6.1 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.13. Thunderbird na verzi 115.9.0.

    Ladislav Hagara | Komentářů: 0
    včera 14:44 | IT novinky

    Linka STOPonline.cz v roce 2023 přijala 3700 hlášení závadného obsahu na internetu, 22 bylo předáno PČR, 23 bylo předáno ISP a 944 závadových domén zobrazujících dětskou nahotu či pornografii bylo nahráno do mezinárodního systému ICCAM, který je spravován asociací INHOPE.

    Ladislav Hagara | Komentářů: 4
    26.3. 20:44 | Zajímavý článek

    Byla publikována podrobná analýza v upstreamu již opravené bezpečnostní chyby CVE-2024-1086 v Linuxu v nf_tables.

    Ladislav Hagara | Komentářů: 0
    26.3. 18:44 | Nová verze

    Byla vydána nová verze 4.1 svobodného 3D softwaru Blender. Přehled novinek i s náhledy a videi v obsáhlých poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    26.3. 18:22 | Nová verze

    Úkolníček Taskwarrior (Wikipedie) pro správu úkolů z příkazového řádku byl vydán ve verzi 3.0.0.

    Ladislav Hagara | Komentářů: 0
    26.3. 16:33 | IT novinky

    Společnost Canva stojící za stejnojmenným webovým grafickým editorem koupila společnost Serif stojící za grafickým editorem Affinity.

    Ladislav Hagara | Komentářů: 10
    26.3. 16:00 | Nová verze

    Byla vydána betaverze Fedora Linuxu 40, tj. poslední zastávka před vydáním finální verze, která je naplánována na úterý 16. dubna. Z novinek (ChangeSet) lze vypíchnout podporu frameworku pro strojové učení PyTorch. Fedora KDE Plasma Desktop přichází s Plasmou 6 a běží nad Waylandem. Fedora Workstation přichází s GNOME 46.

    Ladislav Hagara | Komentářů: 4
    26.3. 06:11 | IT novinky

    Před měsícem společnost OpenAI představila AI model Sora pro generování realistických videí z textového popisu. Včera zveřejnila 7 videí od umělců, kterým umožnila přístup k tomuto modelu.

    Ladislav Hagara | Komentářů: 0
    Steam
     (24%)
     (29%)
     (13%)
     (10%)
     (24%)
    Celkem 375 hlasů
     Komentářů: 9, poslední 25.3. 18:16
    Rozcestník

    Administrace komentářů

    Jste na stránce určené pro řešení chyb a problémů týkajících se diskusí a komentářů. Můžete zde našim administrátorům reportovat špatně zařazenou či duplicitní diskusi, vulgární či osočující příspěvek a podobně. Děkujeme vám za vaši pomoc, více očí více vidí, společně můžeme udržet vysokou kvalitu AbcLinuxu.cz.

    Příspěvek
    2.11.2004 13:23 gogo
    Rozbalit Rozbalit vše Re: Rotovani Apache Logu

    jo. stop posle pouze signal a na poravdu pretizenych servrech to muze trvat i nekolik vterin, nez skonci vsechny httpd procesy. cronolog mi jeste porad nevyhovoval, tak jsem misto toho sesmolil (pouzivame to uz pres rok) todle: -u include chybi < > protoze se me s tim nechtelo prepisovat HOWG. -

    #define	_GNU_SOURCE
    #include stdio.h
    #include time.h
    #include string.h
    #include unistd.h
    #include sys/types.h
    #include sys/stat.h
    #include fcntl.h
    #include sys/time.h
    #include errno.h
    #include stdlib.h
    
    #define	DEBUG	fprintf
    
    
    extern int errno;
    
    static int log= -1;
    static char *jmeno=NULL;
    static char *webal=NULL;
    static int firstmem=1;
    char last='\n';
    int findnewline=0;
    
    
    int newlinereset(void);
    void cas(struct tm *plogtime);
    void konci( int);
    void linkwebal(struct tm *caslogu, char *webal, char *prefix);
    void pojmenuj(struct tm *caslogu, char *prefix);
    void otevri( char *jmeno, char *param);
    
    
    int main(int argc, char **argv)
    {
    	struct tm caslogu, casted;
    	struct stat staty;
    	
    	char buff[4096];
    	int ret;
    
    	buff[0]='\0';
    
    	/* neblokuj pri cteni vstupu */
    	fcntl( fileno(stdin), O_NONBLOCK);
    	
    	/* kontrola parametru */
    	if ( argc!=2) {
    		DEBUG(stderr, "spatny pocet argumentu\n");
    		konci(1);
    	}
    
    	/* webalizerovy link */
    	ret= strlen("webalizer") + strlen( argv[1]);
    	webal= malloc( ret+1);
    	strcpy( webal, argv[1]);
    	strcat( webal, "webalizer" );
    	DEBUG( stderr, "%s\n", webal);
    
    	/* vnejsi cyklus, ktery se stara o soubory */
    	do {
    		/* nacti cas */
    		cas(&caslogu);
    		/* vytvor link pro webalizer */
    		linkwebal( &caslogu, webal, argv[1]);
    		/* vytvor jmeno */
    		pojmenuj(&caslogu, argv[1]);
    		/* otevri log soubor */
    		otevri( jmeno, argv[1]);
    
    		/* vnitrni cyklus ktery se stara o cteni a preruseni jen na \n */
    		do {
    			/* smazany log? */
    			ret=stat(jmeno, &staty);
    			if (0!=ret) {
    				DEBUG(stderr, "nekdo smazal soubor? chyba stat(): %s\n",
    						strerror(errno));
    				if (newlinereset()) break;
    			}
    
    			/* kontrola casu */
    			cas(&casted);
    
    			/* zmena dne je zmena logu (na konci radky) */
    			if (caslogu.tm_yday!= casted.tm_yday) {
    				DEBUG(stderr, "zmena casu. bude se menit soubor\n");
    				if (newlinereset()) break;
    			}
    
    			if ( strlen(buff)) {
    				if (strlen(buff)!= write(log, buff, strlen(buff))) {
    					konci(3);
    				} else {
    					last= buff[strlen(buff)-1];
    				}
    			}
    		} while ( !feof(stdin) && !ferror(stdin) &&
    			fgets(buff, sizeof(buff), stdin)!=NULL);
    
    	} while ( !feof(stdin) && !ferror(stdin));
    	/* nikdy */
    	close( log);
    	free(jmeno);
    	return(0);
    }
    
    
    /* korektne skonci */
    void konci(int kod)
    {
    	if (log>=0) close(log);
    	if (!firstmem && NULL!=jmeno) free(jmeno);
    	exit(kod);
    }
    
    /* nacti cas */
    void cas(struct tm *plogtime)
    {
    	time_t ted= time(NULL);
    	localtime_r( &ted, plogtime);
    }
    
    /* vytvor link pro webalizer */
    void linkwebal(struct tm *caslogu, char *webal, char *prefix)
    {
    	int ret;
    	struct tm oldlogtime;
    	struct stat wstaty;
    	time_t vcera= time(NULL) - 86400;
    
    	/* zkontroluj existenci "webalizer" hardlinku */
    	ret=stat( webal, &wstaty);
    	if ( ret && !ENOENT== errno) perror("webalizer link - stat");
    	
    	/* pokud existuje, tak jej odstran */
    	if (( 0== ret) || (! ENOENT== errno)) {
    		if ( (0== ret) || (-1 == ret && (! ENOENT== errno))) {
    			ret= unlink( webal);
    			if (ret) perror("webalizer link - unlink");
    		}
    	}
    
    	/* pokud je to po stratu, tak vyrob jmeno z minuleho dne */
    	if ( NULL== jmeno) {
    		localtime_r( &vcera, &oldlogtime);
    		pojmenuj( &oldlogtime, prefix);
    	}
    
    	/* pokud existuje, tak proved hardlink */
    	ret= stat( jmeno, &wstaty);
    	if (! ret) {
    		ret= link( jmeno, webal);
    		if ( ret) perror("webalizer link - link");
    	}
    }
    
    /* vytvor jmeno z casu */
    void pojmenuj(struct tm *caslogu, char *prefix)
    {
    	int delka, cela;
    	char strcas[10];
    
    	if (8!=strftime( strcas, 9, "%Y%m%d", caslogu)) {
    		DEBUG(stderr, "spatna delka prevedeneho casu\n");
    		konci(2);
    	}
    	strcas[8]='\0';
    
    	/* vyrob jmeno logu */
    	delka= strlen(prefix);
    	cela= delka+ strlen(strcas)+ 1;
    	if (firstmem) {
    		jmeno= (char *)malloc( cela);
    		firstmem=0;
    		if ( NULL==jmeno) {
    			DEBUG(stderr, "nepodarilo se alokovat pamet\n");
    			konci(3);
    		}
    	}
    
    	/* pospojuj argument a cas do jmena */
    	strncpy(jmeno, prefix, delka);
    	jmeno[delka]='\0';
    
    	strncpy( (char *)&(((char *)jmeno)[delka]), strcas, cela-delka);
    	jmeno[cela]='\0';
    }
    
    /* otevri soubor */
    void otevri( char *jmeno, char *param)
    {
    	log= open( jmeno, O_WRONLY | O_CREAT | O_APPEND, 384);
    	if (-1==log) {
    		DEBUG(stderr, "nepodarilo se otevrit soubor\n");
    		konci(4);
    	}
    	unlink(param );
    	link( jmeno, param);
    }
    
    /* kontroluj jestli je posledni zapsany \n */
    int newlinereset(void)
    {
    	fdatasync( fileno(stdin));
    	/* byl napsan naposled konec radku */
    	if (last=='\n') {
    		DEBUG(stderr, "newlinereset(): last \\n\n");
    		findnewline=0;
    		close( log);
    		return(1);
    		/* je potreba najit konec radku */
    	} else if (last!='\n') {
    		DEBUG(stderr, "newlinereset(): last neni \\n\n");
    		findnewline=1;
    		return(0);
    	}
    }
    
    

    v konfiguraku pak

    CustomLog "|/usr/local/bin/jmeno /usr/local/apache2/logs/access_log" combined
    

    no a zalohovani resim z cronu jen pro stary logy nejak takhle:

    #!/bin/bash
    
    store="/mnt/backup/log/apache";
    log="${store}/default.tar";
    
    if test -f ${log} && test -r ${log}; then
            if test `date +%u` = 2; then
                    newlog=`date +%Y%m%d_%s`;
                    mv ${log} ${store}/default_do_${newlog}.tar;
                    bzip2 -9z ${store}/default_do_${newlog}.tar;
            fi
    fi
    
    for F in `cat /usr/local/var/logs/default.log`; do
            dir=`dirname ${F}`;
            find ${dir} -mtime +3 | grep -e "${F}[0-9]\+" | xargs --no-run-if-empty tar vuf ${log} --exclude ${F} --exclude ${F}`date +%Y%m%d` --remove-files
    done
    

    kdyz tak na to letmo koukam, tak uz ani presne nevim co ten skript dela... ale par jich necha ne puvodnim miste a zbytek hodi do tar archivu kterej po case zrotuje a zbali bzipem. ale funguje a to je hlavni.

    V tomto formuláři můžete formulovat svou stížnost ohledně příspěvku. Nejprve vyberte typ akce, kterou navrhujete provést s diskusí či příspěvkem. Potom do textového pole napište důvody, proč by měli admini provést vaši žádost, problém nemusí být patrný na první pohled. Odkaz na příspěvek bude přidán automaticky.

    Vaše jméno
    Váš email
    Typ požadavku
    Slovní popis
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.