Tambahkan baris ke cron dari skrip

40

Apakah ada cara untuk menambahkan baris ke cron pengguna melalui skrip?

Saya biasanya melakukannya dengan menggunakan crontab -e, tetapi saya ingin mengotomatiskan tugas ini dengan skrip shell.

Adam Matan
sumber
stackoverflow.com/questions/878600/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

49

Anda dapat menggemakan baris ke bagian bawah crontab pengguna saat ini seperti ini:

#!/bin/bash

line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -
Richard Holloway
sumber
+1 cuz Anda mengalahkan saya untuk itu (saya punya kesalahan skrip saat menguji: D). 1 hal yang perlu Anda tambahkan saya pikir: sistem perlu diinformasikan yang crondiubah.
Rinzwind
Saya tahu ini akan menjadi perlombaan untuk dijawab! Anda benar bahwa cron perlu diberitahukan. Inilah sebabnya mengapa Anda tidak bisa hanya mengulang perintah ke akhir crontab. Saya telah menguji bahwa skrip di atas berfungsi dan cron mulai menjalankan perintah.
Richard Holloway
13
Oh dan saya pikir ini juga kesalahan jika crontabpengguna itu belum ada (?)
Rinzwind
7
Ini memperingatkan Anda bahwa pengguna crontab tidak ada, jika itu masalahnya, tetapi kemudian akan membuatnya. Saya memvotasikan komentar Anda sebagai wawasan.
Richard Holloway
3

Jika Anda ingin mengedit nilai di crontab Anda, Anda dapat melakukan sesuatu di sepanjang baris:

$ crontab -l | sed -e 's/foo/bar/' | crontab -

Jelas Anda harus berhati-hati dengan subtitusi Anda untuk memastikan itu hanya cocok dengan baris yang ingin Anda ubah; jika tidak semua foosdiubah menjadi bars(dalam contoh ini).

Keuntungan dari metode ini adalah Anda tidak mengganti seluruh crontab. (Penjepit metaforis daripada palu godam.)

Anda dapat menggunakan perintah pengeditan apa pun alih-alih sed . Misalnya, jika Anda ingin menggunakan ed untuk menyentuh garis yang mulai tampak seperti ini:

2 * * * * /sbin/flitch --days 3,4 > /var/log/flitch.out 2>&1

Katakanlah baris ini ada di antara banyak baris atau Anda memiliki banyak crontab yang berbeda untuk diperbarui pada sistem yang berbeda dan Anda hanya tahu baris Anda akan menjadi satu-satunya baris dengan istilah flitchdi dalamnya.

Itu mungkin terlihat seperti:

$ cat /tmp/edscript
/flitch
s/3/9/
w
q
$ crontab -l > /tmp/out && ed /tmp/out < /tmp/edscript && crontab - < /tmp/out
$ crontab -l
...
2 * * 1 * /sbin/flitch --days 9,4 > /var/log/flitch.out 2>&1
...

Sekarang saya harus mengakui bahwa hampir 100% dari waktu sed akan melakukan apa ed akan melakukannya, tapi selalu baik untuk memiliki alat tambahan pada pisau tentara Swiss. ^. ^

fbicknel
sumber