Mengirimkan output cron ke file dengan stempel waktu atas namanya

38

Saya punya crontab seperti ini di pengaturan LAMP:

0 0 * * * /some/path/to/a/file.php > $HOME/cron.log 2>&1

Ini menulis output file ke cron.log . Namun, ketika dijalankan lagi, ia menimpa apa pun yang sebelumnya ada di file.

Bagaimana saya bisa mendapatkan cron untuk menghasilkan file dengan stempel waktu dalam nama file?

Contoh nama file akan menjadi seperti ini: 2010-02-26-000000-cron.log

Saya tidak terlalu peduli dengan formatnya, asalkan punya timestamp.

Terima kasih sebelumnya.

Philip Morton
sumber
8
jika Anda tidak ingin $HOME/cron.logditimpa, gunakan >>tidak>
Dave Cheney

Jawaban:

66

Mencoba:

0 0 * * * /some/path/to/a/file.php > $HOME/`date +\%Y\%m\%d\%H\%M\%S`-cron.log 2>&1

Bermain-main dengan format tanggal, jika Anda suka; pastikan untuk melarikan diri %seperti \%, seperti di atas.

pembelahan
sumber
Dan izinkan saya secara umum menyarankan pendekatan untuk nama file seperti 0 0 * * * /some/path/to/a/file.php > $HOME/scriptname-tanggal + \% Y \% m \% d \% H \% M \% S.log
Kristian
Jika Anda membutuhkannya sedikit lebih dapat dibaca manusia coba: date +\%Y\ \%m\ \%d\ \%H:\%M:\%S-cron.log
DevilCode
4
@DevilCode, ya, meskipun spasi dalam nama file tidak terlalu konvensional di Unix. Tanda hubung atau garis bawah mungkin menjadi pilihan yang lebih baik: date +\%Y-\%m-\%d_\%H:\%M:\%S-cron.log.
fisi
1
Karakter pelarian yang aneh itu selalu membuatku kesal Terima kasih atas pengingatnya!
Tony-Caffe
14

saya akan sangat menyarankan Anda menyimpan semuanya ke dalam file yang sama, menggunakan cap waktu, seperti yang dijelaskan di sini .

menghapus

2> & 1

dan jalankan melalui skrip timestamping sebelum menyimpannya ke file log (seperti yang dijelaskan dalam tautan di atas).

tony gil
sumber
6

Anda juga dapat menambahkan output Anda ke file log dengan melakukannya seperti ini:

0 0 * * * /some/path/to/a/file.php >> $HOME/cron.log 2>&1
Dijeda sampai pemberitahuan lebih lanjut.
sumber
0

Saya memodifikasi skrip seperti ini:

`/bin/date +\%Y\%m\%d`.log
Ardhy
sumber
-2

Saya memecahkan masalah ini; cukup tambahkan jalur tanggal (/ nampan / tanggal) sebelum perintah tanggal.

pengguna213005
sumber
2
Silakan tambahkan lebih banyak info dan contoh.
Danijel
-2
@daily /some/path/to/a/file.php 2>&1 > $HOME/$(date +\%Y\%m\%d\%H\%M\%S)-cron.log
Ivan Kovtun
sumber
5
Ini akan membutuhkan banyak penjelasan.
Sven