Pertanyaan Tambahkan baris ke cron dari skrip


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

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


36
2017-08-25 09:08


asal


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


Jawaban:


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

#!/bin/bash

line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -

45
2017-08-25 09:40



+1 cuz Anda mengalahkan saya untuk itu (saya memiliki kesalahan skrip saat pengujian: D). 1 hal yang perlu Anda tambahkan Saya pikir: sistem perlu diberitahu itu cron sudah berubah. - Rinzwind
Saya tahu ini akan menjadi perlombaan untuk dijawab! Anda benar dalam cron itu perlu diberitahu. Inilah sebabnya mengapa Anda tidak bisa hanya menggemakan perintah ke ujung crontab. Saya telah menguji bahwa skrip di atas berfungsi dan cron mulai menjalankan perintah. - Richard Holloway
Oh dan saya pikir ini juga kesalahan jika crontab untuk pengguna itu belum ada (?) - Rinzwind
Ini memperingatkan Anda bahwa pengguna crontab tidak ada, jika memang demikian, tetapi kemudian akan membuatnya. Saya mengangkat komentar Anda sebagai wawasan. - Richard Holloway


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

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

Tentunya Anda harus berhati-hati dengan substitusi Anda untuk memastikan itu hanya cocok dengan garis (s) yang ingin Anda ubah; kalau tidak semua foos diubah menjadi bars (dalam contoh ini).

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

Anda dapat menggunakan perintah pengeditan sebagai ganti sed. Misalnya, jika Anda ingin menggunakannya ed untuk menyentuh garis yang mulai terlihat seperti ini:

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

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

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% waktunya sed akan melakukan apa ed akan lakukan, tapi selalu baik untuk memiliki alat tambahan pada pisau tentara Swiss. ^. ^


3
2017-09-27 15:15