Saya memiliki skrip shell yang sangat sederhana yang perlu saya jalankan sebagai cronjob, tetapi saya bahkan tidak bisa menjalankan skrip tes. Berikut ini dan contoh skripnya:
/home/myUser/scripts/test.sh
#!/bin/bash
touch file.txt
crontab:
* * * * * /home/myUser/scripts/test.sh
Skrip berjalan dengan baik dari terminal tetapi tidak bisa't membuatnya berjalan sebagai cronjob. Sejauh ini saya sudah mencoba ini di crontab:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * /bin/bash /home/myUser/scripts/test.sh
Dan ini di file skrip:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/myUser/scripts
Dari apa yang saya kumpulkan solusinya mungkin ada di variabel PATH tetapi saya tidak tahu apa itu karena pemahaman saya sangat terbatas pada saat ini. Jadi pertanyaan saya adalah, bagaimana cara membuat skrip saya berjalan sebagai cronjob?
EDIT: file memiliki izin rwx untuk semua pengguna. Ini hanya untuk tujuan pengujian.
EDIT: cronjobs seperti * * * * * * * touch /home/myUser/scripts/test.txt
berfungsi tetapi tidak akan menjalankan skrip.
Cara termudah adalah dengan menggunakan GUI:
Untuk Gnome gunakan gnome-schedule (universe)
sudo apt-get install gnome-schedule
Untuk KDE gunakan kde-config-cron
It should be pre installed on Kubuntu
Tetapi jika Anda menggunakan linux tanpa kepala atau tidak menginginkan GUI, Anda dapat menggunakan:
crontab -e
Jika anda mengetikkannya di Terminal, anda akan mendapatkan sebuah tabel.
Anda harus memasukkan cronjob anda sekarang.
Format sebuah job seperti ini:
* * * * * YOURCOMMAND
- - - - -
| | | | |
| | | | +----- Day in Week (0 to 7) (Sunday is 0 and 7)
| | | +------- Month (1 to 12)
| | +--------- Day in Month (1 to 31)
| +----------- Hour (0 to 23)
+------------- Minute (0 to 59)
Ada juga beberapa celana pendek (jika Anda tidak menginginkan *):
@reboot --> only once at startup
@daily ---> once a day
@midnight --> once a day at midnight
@hourly --> once a hour
@weekly --> once a week
@monthly --> once a month
@annually --> once a year
@yearly --> once a year
Jika Anda ingin menggunakan celana pendek sebagai cron (karena mereka tidak´tidak bekerja atau lebih):
@daily --> 0 0 * * *
@midnight --> 0 0 * * *
@hourly --> 0 * * * *
@weekly --> 0 0 * * 0
@monthly --> 0 0 1 * *
@annually --> 0 0 1 1 *
@yearly --> 0 0 1 1 *
Di direktori apa file.txt berada? cron menjalankan pekerjaan di direktori rumah Anda, jadi kecuali jika skrip Anda ada di tempat lain, di situlah ia akan mencari/membuat file.txt.
EDIT: Ketika Anda merujuk ke sebuah file tanpa menentukan jalur lengkapnya (misalnya file.txt
, bukan jalur lengkap /home/myUser/scripts/file.txt
) di shell, maka Anda dianggap merujuk ke file di direktori kerja Anda saat ini. Ketika Anda menjalankan skrip (baik secara interaktif atau melalui crontab), direktori kerja skrip tidak ada hubungannya sama sekali dengan lokasi skrip itu sendiri; sebagai gantinya, direktori kerja itu diwarisi dari apa pun yang menjalankan skrip.
Jadi, jika Anda cd
(mengubah direktori kerja) ke direktori tempat skrip berada dan kemudian menjalankannya, file.txt
akan merujuk ke file di direktori yang sama dengan skrip. Tetapi jika Anda tidak cd
terlebih dahulu, file.txt
akan merujuk ke file di direktori mana pun Anda berada ketika Anda menjalankan skrip. Misalnya, jika direktori rumah Anda adalah /home/myUser, dan Anda membuka shell baru dan segera menjalankan skrip (sebagai scripts/test.sh
atau /home/myUser/scripts/test.sh
; ./test.sh
tidak akan berfungsi), itu akan menyentuh file /home/myUser/file.txt karena /home/myUser adalah direktori kerja Anda saat ini (dan karena itu juga direktori kerja skrip).
Ketika Anda menjalankan skrip dari cron
, pada dasarnya melakukan hal yang sama: skrip menjalankannya dengan direktori kerja yang diatur ke direktori rumah Anda. Dengan demikian semua referensi berkas dalam skrip diambil relatif ke direktori rumah Anda, kecuali jika skrip cd
di tempat lain atau menentukan path absolut ke berkas tersebut.
Ini harus berjalan dengan baik di cron juga. Silakan periksa hal-hal di bawah ini.
1- Anda mengedit file yang tepat untuk mengatur cron.
2- Anda telah memberikan izin yang tepat (izin eksekusi) ke skrip berarti skrip Anda dapat dieksekusi.