# vixie-cron e cron.{daily,weekly,monthly}, ma a che ora?

## swit

salve,

mi trovo a ruotare alcuni log di sistema con logrotate.

Con i log di sistema genero alcune statistiche, quindi mi è utile gestire tutti gli orari del cron (e operazioni di logrotate) per non tagliare spazzi temporali.

Ho lo script di avvio di logrotate in /etc/cron.daily

Vedendo il mio /etc/crontab:

 *Quote:*   

> # for vixie cron
> 
> #
> 
> # $Header: /var/cvsroot/gentoo-x86/sys-process/vixie-cron/files/crontab-3.0.1-r4,v 1.1 2005/03/04 23:59:48 ciaranm Exp $
> ...

 

Ho pensato che i cron daily venissero eseguiti sempre a mezzanotte e 2 minuti di tutti i giorni, ma invece guardando l'orario dei log ruotati vengono fuori orari assurdi e non riesco a capirne il motivo: *Quote:*   

> # ls -l /var/log/squid/
> 
> total 41816
> 
> -rw-r-----  1 squid squid 38425673 Mar 20 13:49 access.log
> ...

 

 *Quote:*   

> # ls /etc/cron.daily/
> 
> logrotate.cron  slocate

 

 *Quote:*   

>  # ls /etc/logrotate.d/
> 
> squid  syslog-ng

 

 *Quote:*   

> # cat /etc/logrotate.d/squid
> 
> /var/log/squid/*.log {
> 
>     copytruncate
> ...

 

Grazie

----------

## gutter

IPOTESI:hai per caso installato anacron?

----------

## swit

No, non l'ho installato:

 *Quote:*   

> *  sys-process/anacron
> 
>       Latest version available: 2.3-r2
> 
>       Latest version installed: [ Not Installed ]
> ...

 

----------

## power83

forse e' la tua soluzione, anacron a quanto ho letto permette di eseguire i crontab nn eseguiti x varie ragioni, specialmente se la macchina era spenta, al primo riavvio.

fcron dovrebbe fare la stessa cosa, ma in una soluzione unica.

cmq questo e' il link delle giude ai cron, sempre utile: http://www.gentoo.org/doc/it/cron-guide.xml

----------

## makoomba

alle 00:02 viene solo rimosso il lock, è run-crons che esegue gli scripts seguendo l'ordine hourly,daily, etc.

l'orario effettivo di avvio dei crons lo si vede dai lockfiles

```
mail log # ls -l /var/spool/cron/lastrun/

totale 0

-rw-r--r--  1 root root 0 21 mar 03:10 cron.daily

-rw-r--r--  1 root root 0 21 mar 16:10 cron.hourly

-rw-r--r--  1 root root 0  1 mar 05:40 cron.monthly

-rw-r--r--  1 root root 0 18 mar 04:20 cron.weekly

```

----------

## swit

la cosa che continuo a non capire è: come faccio a stabilire un ora per i cron.hourly,daily etc??

L'unica soluzione è levarli dalle rispettive cartelle del cron per metterli in un crontab gestito da me?

questi sono i miei lock file:

 *Quote:*   

>  # ls -l /var/spool/cron/lastrun/
> 
> total 0
> 
> -rw-r--r--  1 root root 0 Mar 22 00:10 cron.daily
> ...

 

----------

## makoomba

mi sembra di capire che il tuo problema sia ruotare i log appena dopo la mezzanotte.

puoi utilizzare direttamente syslog-ng, specificando qualcosa tipo

```
file("/var/log/$YEAR$MONTH$DAY.log")
```

----------

## Kernel78

 *makoomba wrote:*   

> mi sembra di capire che il tuo problema sia ruotare i log appena dopo la mezzanotte.
> 
> puoi utilizzare direttamente syslog-ng, specificando qualcosa tipo
> 
> ```
> ...

 

Questo non lo sapevo ... mi torna molto utile...

Sei sempre una fonte di informazioni utili e interessanti   :Wink: 

----------

## swit

 *makoomba wrote:*   

> mi sembra di capire che il tuo problema sia ruotare i log appena dopo la mezzanotte.
> 
> puoi utilizzare direttamente syslog-ng, specificando qualcosa tipo
> 
> ```
> ...

 

il mio problema non è tanto ruotarli dopo la mezzanotte, infatti per me non è importante il momento nel quale viene fatto.

Il mio problema è capire a che ora viene fatto di preciso.

Penso che leverò logrotate dal crondaily e lo mettero in crontab a mano in modo da sapere a che ora precisa viene eseguito.

----------

## Kernel78

 *swit wrote:*   

> il mio problema non è tanto ruotarli dopo la mezzanotte, infatti per me non è importante il momento nel quale viene fatto.
> 
> Il mio problema è capire a che ora viene fatto di preciso.
> 
> Penso che leverò logrotate dal crondaily e lo mettero in crontab a mano in modo da sapere a che ora precisa viene eseguito.

 

Penso che se metterlo direttamente in crontab sia il modo migliore per eseguirlo ad una determinata ora visto che cron.daily sia meno restrittivo per quanto riguarda l'orario di esecuzione (anche se potrei sbagliarmi).

----------

## makoomba

esatto: con cron.daily, si ha una soluzione del tipo "a partire da", usando crontab si può specificare l'orario preciso.

@swit

se devi solo sapere a che ora è partito il logrotate, puoi semplicemente modificare logrotate.cron aggiungendo 

```
touch $nomeFile
```

----------

## swit

 *makoomba wrote:*   

> esatto: con cron.daily, si ha una soluzione del tipo "a partire da", usando crontab si può specificare l'orario preciso.
> 
> @swit
> 
> se devi solo sapere a che ora è partito il logrotate, puoi semplicemente modificare logrotate.cron aggiungendo 
> ...

 

si ci avevo pensato anche io, ma visto che devo generare delle statistiche (vedi il primo post) ho la necessità che la rotazione venga fatta sempre al solito orario.

Vada per il logrotate messo in crontab mano  :Smile: 

Grazie a tutti per l'aiuto!

----------

## mrfree

"Resuscito" la discussione (visto che siamo in periodo) visto che ho lo stesso problema e non ho ancora trovato una soluzione... ma non c'è un modo per stabilire che per me daily vuol dire alle 9:00 ogni giorno e weekly alle 10:00 una volta a settimana???

----------

## swit

sono arrivato alla conclusione che con vixie-cron se hai bisogno che un dato comando venga esrguito in un orario preciso l'unico modo è metterlo in crontab a mano, se invece l'orario non ti interessa lo puoi mettere nei vari daily,hourly ecc..

ciao

----------

## randomaze

 *swit wrote:*   

> sono arrivato alla conclusione che con vixie-cron se hai bisogno che un dato comando venga esrguito in un orario preciso l'unico modo è metterlo in crontab a mano, se invece l'orario non ti interessa lo puoi mettere nei vari daily,hourly ecc..

 

Se metti la entry direttamente in cron, indicando data ed ora i processi vengono eseguiti al tempo indicato. Certo, il PC deve essere acceso.

Se metti un processo in cron.daily il processo viene eseguito una volta al giorno (tranne quando il PC resta spento tutto il giorno) secondo disponibilitá. A occhio, se non interpreto male il crontab a mezzanotte e 10 se il PC é acceso, altrimenti nei primi 10 minuti da quando il PC viene avviato

----------

## mrfree

Ok allora commento tutto il contenuto del file /etc/crontab disabilitando di fatto il crontab di sistema e aggiungo a mano sul crontab di root

----------

## spugna

 *mrfree wrote:*   

> Ok allora commento tutto il contenuto del file /etc/crontab disabilitando di fatto il crontab di sistema e aggiungo a mano sul crontab di root

 

Credo che in vixie-cron non esista il crontab di root, ma solo quello di sistema...

----------

## mrfree

 *spugna wrote:*   

> Credo che in vixie-cron non esista il crontab di root, ma solo quello di sistema...

 

Bhe credo di si visto che l'ho settato con 

```
# crontab -e
```

 e quello di sistema è completamente commentato  :Wink: 

----------

## .:deadhead:.

ora, magari scopro l'acqua calda, o magari non capisco la tua richiesta, ma io ho in etc/crontab questo 

```
cat /etc/crontab

# for vixie cron

#

# $Header: /var/cvsroot/gentoo-x86/sys-process/vixie-cron/files/crontab-3.0.1-r4,v 1.1 2005/03/04 23:59:48 ciaranm Exp $

#

#

# Global variables

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

# check scripts in cron.hourly, cron.daily, cron.weekly and cron.monthly

0  *  * * *     root    rm -f /var/spool/cron/lastrun/cron.hourly

1  3  * * *     root    rm -f /var/spool/cron/lastrun/cron.daily

15 4  * * 6     root    rm -f /var/spool/cron/lastrun/cron.weekly

30 5  1 * *     root    rm -f /var/spool/cron/lastrun/cron.monthly

*/10  *  * * *  root    test -x /usr/sbin/run-crons && /usr/sbin/run-crons

```

Come vedi c'è scritto he ogni 10 min viene eseguito il programma che ci occupa dei cron ossia lo script 

```
/usr/sbin/run-crons
```

 all'interno di questo script sono inserite a mano, in termini di minuti di offset, l'ora in cui ogni operazione viene eseguita. Nel caso cmq sia che tu non voglia toccare quello script puoi semplicemente crearti tu una regola in crontab per logrotate, richiamando appunto lo script presente in cron.daily.

----------

## mrfree

 *.:deadhead:. wrote:*   

> puoi semplicemente crearti tu una regola in crontab per logrotate, richiamando appunto lo script presente in cron.daily

 

Alla fine ho fatto così disabilitando cioè il crontab di sistema e aggiungendo a mano in quello di root i singoli script presenti nei vari cron.{daily,weekly...}

----------

## .:deadhead:.

Non sarebbe meglio fare l'inverso? ossia eliminare quello di root [crontab -r] ed editare quello di sistema [nano /etc/crontab] ?

----------

## spugna

 *mrfree wrote:*   

> Bhe credo di si visto che l'ho settato con 
> 
> ```
> # crontab -e
> ```
> ...

 

Scusa, in effetti hai ragione, è che quando leggo le guide le leggo "a blocchi di 20 righe" e le cose mi sfuggono  :Smile: 

tipo che sulla guida c'era scritto "...Si noti che solo Vixie cron gestisce le operazioni in /etc/crontab in maniera automatica. Gli utilizzatori di Dcron e Fcron dovranno eseguire crontab /etc/crontab ogni qual volta vengano apportati dei cambiamenti a /etc/crontab..." e mi è sembrato giusto interpretare che vixie-cron non avesse il crontab di sistema  :Razz: 

----------

## mrfree

 *.:deadhead:. wrote:*   

> Non sarebbe meglio fare l'inverso? ossia eliminare quello di root [crontab -r] ed editare quello di sistema [nano /etc/crontab] ?

 

Bhe si... dovrebbe essere equivalente considerando anche il fatto che syslog-ng mi gira con i privilegi di root per default

----------

