Mengapa pekerjaan cron saya berjalan bulan ini?

31

Hari ini adalah 1 November 2016 atau dalam angka (tidak ambigu), 2016-11-01.

Saya memiliki tugas mengatur cron pengguna seperti ini:

# m h  dom mon dow   command
33  3   1  */2  *    /home/user/...

Seharusnya berjalan setiap bulan pada tanggal satu bulan pada jam 3:33, tidak peduli hari apa dalam seminggu, tetapi untuk beberapa alasan itu dijalankan hari ini, meskipun 11 tidak habis dibagi 2.

Adakah yang bisa menjelaskan hal ini kepada saya? Apakah asumsi saya tentang keterbagian oleh 2 salah?

EDIT: Saya lupa menyebutkan, saya menjalankan cronversi "3.0pl1-127 + deb8u1" pada mesin Debian 8.6 "Jessie".

comfreak
sumber
2
Kemungkinan rangkap dari Mengapa crontab saya tidak berfungsi, dan bagaimana saya bisa memecahkan masalah itu?
user9517 mendukung GoFundMonica
Jadi, Anda berbicara tentang hari ke 11 dari bulan 2016 di tahun 1 lalu. :) (Urutan tanggal paling umum di Amerika adalah bulan-hari-tahun.)
chicks
@chicks memeriksa riwayat edit dari pertanyaan ini, saya awalnya menggunakan format yang Anda sebutkan ;-)
comfreak
@ ayam maksudmu bulan / hari / tahun?
user253751
@immibis No. ... comfreak: lol
chicks

Jawaban:

61

Ini /bukan ekspresi aritmatika, melainkan menggambarkan "nilai langkah" di atas rentang nilai yang diizinkan . Jadi, karena bulan selalu dimulai dengan 1alih - alih 0, /2berarti "mengambil setiap nilai lainnya", menghasilkan (1, 3, 5, 7, 9, 11).

Ini juga dijelaskan dalam halaman buku panduan, meskipun ini tidak terlalu jelas dan mudah dimengerti:

Nilai langkah dapat digunakan bersama dengan rentang. Mengikuti rentang dengan "<number>" menentukan lompatan nilai angka melalui rentang. Misalnya, "0-23 / 2" dapat digunakan di bidang jam untuk menentukan eksekusi perintah setiap jam (alternatif dalam standar V7 adalah "0,2,4,6,8,10,12,14,16 , 18,20,22 "). Langkah-langkah juga diizinkan setelah tanda bintang, jadi jika Anda ingin mengatakan "setiap dua jam", gunakan saja "* / 2".

Sven
sumber
2
Terima kasih atas jawaban Anda, saya baru menyadarinya sendiri setelah membaca halaman manual lagi dan mengerjakan ini di kepala saya. Saya biasanya hanya bekerja dengan pekerjaan cron jangka pendek di mana angka dimulai dengan 0 dan asumsi saya benar-benar masuk akal.
comfreak
18
Saya hanya merenungkan mengapa pertanyaan ini tidak ditanyakan lebih sering dan sampai pada kesimpulan yang sama: Karena sedikit orang menjalankan pekerjaan dengan apa pun yang "*" di bidang bulan.
Sven
Satu pertanyaan, apa yang akan terjadi jika nomornya tidak dibagi, misalnya */5? Apakah 1,6,11,1,6 ... atau 1,6,11,4,9 ...? Saya berasumsi bahwa "rentang nilai yang diizinkan" berarti tidak memiliki memori, tetapi sekarang saya tidak begitu yakin tentang itu.
MariusSiuram
@MariusSiuram: Varian pertama. Sekali lagi, ini bukan operasi aritmatika. crondcukup ambil daftar nilai yang mungkin, terapkan pemilih langkah sekali dan kemudian gunakan hasil ini berulang kali.
Sven
4

Hari ini adalah hari pertama di bulan November.

* / 2 berarti cronjob Anda akan dieksekusi setiap bulan seperti yang Anda katakan.

Jadi bulan depan (Desember) cronjob tidak akan dieksekusi, tetapi bulan (Januari) setelahnya.

Bulan sebelum bulan ini (Oktober) cronjob tidak dieksekusi. Tetapi pada bulan September itu.

Anak yatim
sumber
1
Jadi menurut Anda */2bidang bulan sama dengan 1-11/2, bukan 2-12/2. Saya tidak mengatakan Anda salah, tetapi dapatkah Anda membuat dokumentasi pendukung?
MadHatter mendukung Monica
@ MadHatter Sven memang menjelaskannya dengan baik.
Anak yatim
1
Saya setuju, dan yang terbaik, ia mengutip sumber-sumber resmi.
MadHatter mendukung Monica
2
Hanya menunjukkan, September mendahului Oktober, dan bukan Agustus ;-)
hjpotter92