Saya ingin mengatur pekerjaan cron yang secara cerdik melakukan chmod / chown pada direktori (direktori dropbox).
Ini berfungsi ketika saya menjalankan perintah secara manual seperti:
sudo chown -R $USER ~/Dropbox
sudo chmod -R u+rw ~/Dropbox
Saya mencoba mengubahnya menjadi pekerjaan cron seperti ini:
10 * * * * sudo chown -R $USER ~/Dropbox
Tapi sepertinya itu tidak berhasil.
Bagaimana cara melakukannya?
permissions
cron
mac-osx-server
tvgemert
sumber
sumber
incron
+inotify
akan menjadi solusi yang lebih bersih :)Jawaban:
Anda ingin skrip root cron Anda (edit dengan menjalankan
sudo crontab -e
) menjadi:Dengan asumsi pengguna bernama
somename
dan itu/home/somename/Dropbox
adalah path lengkap dari direktori Dropbox Anda. Sebagai pengguna root, ~ pergi ke/root
.sumber
$PATH
didefinisikan setara dengan yang ada pada pengguna yang masuk dalam cronjob (mis., Di linuxbox saya $ HOME didefinisikan, tetapi $ PATH diatur ke/usr/bin
dan/bin
dari crontab dan $ USER tidak didefinisikan, jadi dalam hal ini Anda tidak perlu menentukan/bin
sebelum chmod / chown), (b) hindarisudo
dalam skrip (jalankan tugas cron sebagairoot
pengguna), (c) sebagai pengguna root$HOME
akan merujuk ke / root bukan pengguna normal Anda , (d)~
harus dihindari dalam skrip cron (secara default dijalankan sebagai#!/bin/sh
.find
), dll daripada masuk akal untuk dimasukkan ke dalam skrip.sudo
seharusnya hampir tidak pernah digunakan dalam tugas yang dijadwalkan. Itu mengharapkan untuk dapat berbicara ke terminal, dan memerlukan bendera khusus untuk menghindari mencoba melakukannya.Buat pekerjaan cron Anda sebagai root (di
/etc/crontab
- Perhatikan bahwa format file ini sedikit berbeda :). Ini juga bermanfaat untuk bekerja pada sistem yang tidak diinstal.minute hour mday month wday
user
command
sudo
sumber
55 * * * * root chown -R somename ~/Dropbox
somename
bisa dimana saja; ini adalah jalan yang relatif. Kedua,~
hanya dipahami oleh shell; gunakan$HOME
. Gunakan perintah seperti ini:chown -R /some/path/somename $HOME/Dropbox
(ini akan menggunakanroot
's direktori home ...)somename
bukan jalan, tetapi nama pengguna (dan juga harus mengandung nama grupsomename:somegroup
~
) secara KRITIS PENTING - Harap luangkan waktu dengan halaman manual cron dan crontab dan pastikan Anda memahami apa yang terjadi (jika ragu-ragu) , buat cron job yang berfungsiecho "what you want to do" > /tmp/what-i-would-run
dan lihat hasilnya untuk memastikan mereka waras - JAUH peluang lebih sedikit untuk menghancurkan alam semesta.)Dua masalah:
1) Path biasanya tidak diatur dalam cron dengan cara yang sama ketika Anda login. Coba / usr / bin / sudo / bin / chown ... (atau apa pun jalur yang benar untuk program-program di sistem Anda).
2) sudo biasanya meminta kata sandi Anda, atau mungkin tidak senang berjalan tanpa interaksi. Saya sarankan Anda meletakkan perintah di root crontab tanpa sudo sebagai gantinya, maka perintah dijalankan sebagai root.
sumber
Ada beberapa masalah dengan crontab Anda:
Masalah:
sudo
tidak boleh digunakan di sini; membutuhkan input terminalchown
harus ditentukan secara lengkap (yaitu,/bin/chown
)USER
sebagai variabel aktual mungkin tidak ada; beberapa sistem digunakanLOGNAME
~
(tilde) hanya akan dikenali oleh shell - telanjangchown
tidak akan memahaminyaSaya pikir saya akan menuliskannya:
(
eval
Diperlukan untuk mengonversi~$1
ke~user
lalu ke/home/user
.)Jalankan skrip ini dari crontab root:
sumber
Sebagai alternatif, Anda mungkin dapat mengaktifkan dukungan ACL dan menggunakan setfacl untuk mencapai hasil yang sama / mirip.
sumber