Chmod / chown yapan bir cron işi kurma


9

Yinelenen bir chmod / chown bir dizinde (dropbox dizini) yapan bir cron işi ayarlamak istiyorum.

Bu gibi komutları el ile yürüttüğümde çalışır:

sudo chown -R $USER ~/Dropbox
sudo chmod -R u+rw ~/Dropbox

Ben böyle bir cron iş dönüştürmek için çalıştı:

10      *       *       *       *       sudo chown -R $USER ~/Dropbox

Ama bu işi yapmıyor gibi görünüyor.

Bu nasıl yapılır?


incron+ inotifydaha temiz çözümler olurdu :)
franzlorenzon

Yanıtlar:


9

Kök cron betiğinizin (çalıştırarak düzenleyin sudo crontab -e) olmasını istersiniz :

 55 * * * * /bin/chown -R somename /home/somename/Dropbox && /bin/chmod u+rw /home/somename/Dropbox

Kullanıcının adlandırıldığı somenameve bunun /home/somename/DropboxDropbox dizininizin tam yolu olduğunu varsayarsak . Kök kullanıcısı olarak ~ adresine gider /root.


1
Açık cevap için teşekkürler! Sanırım bu aradığım eksik bağlantılardan bazılarını gösteriyor. Yarın ilk şeyi test edeceğim :)
tvgemert

Test edildi ve işe yarıyor!
tvgemert

2
Harika; onun çalışma sevindim. Dersler, (a) gibi çevresel değişkenler beklemeyin olan $PATHbir cronjob kullanıcıya imzalanan bir belirtilenlere denk tanımlanacak (örneğin benim linuxbox $ HOME tanımlanmış, ancak $ PATH olarak ayarlanır /usr/binve /bincrontab ile $ USER adlı tanımlanmamıştır; bu durumda /binchmod / chown'dan önce belirtmeniz gerekmez ), (b) sudokomut dosyalarından kaçının (cron görevini rootkullanıcı olarak çalıştırın ), (c) kök kullanıcı $HOMEnormal kullanıcıya değil / root'a , (d) ~cron komut dosyalarından kaçınılmalıdır (varsayılan olarak çalıştırılır #!/bin/sh.
dr jimbob

Bundan daha karmaşık bir şey yaparsanız David'in tavsiyesi üzerine bir senaryo yazmanızı da öneririm; bir senaryo bir chmod / chown kombinasyonu için aşırıya kaçmış gibi görünüyor. Ancak, diğer kullanıcıların Dropbox'larına veya diğer dizinlerine başvurmaya başlarsanız veya findbir komut dosyasına koymak mantıklı olmaktan ziyade yalnızca yakın zamanda değiştirilen dosyalarda (örn., Sonuç ) vb.
dr jimbob

16

sudogerektiğini neredeyse hiç zamanlanmış görevler kullanılabilecek. Bir terminalle konuşmayı bekler ve bunu yapmaktan kaçınmak için belirli bayraklar gerektirir.

Cron işinizi root olarak oluşturun (in /etc/crontab- Bu dosyanın biçiminin biraz farklı olduğunu unutmayın :). Bu aynı zamanda kurulu olmayan sistemlerde çalışma avantajına da sahiptir .minute hour mday month wdayusercommand
sudo


Teşekkürler! Bunu ben yarattım, ama hala emin değilim. Beklenen sonucu alamadım: 55 * * * * root chown -R somename ~/Dropbox
tvgemert

3
somenameherhangi bir yerde olabilir; göreceli bir yoldur. İkincisi, ~sadece kabuk tarafından anlaşılır; kullanın $HOME. Bunun gibi bir komut kullanın: chown -R /some/path/somename $HOME/Dropbox(bu, rootgiriş dizinini kullanacaktır ...)
Mei

@David: somenamebir yol değil, kullanıcı adı (ve ayrıca grup adını da içermelidir somename:somegroup
:)

5
@tvgemert David'in yukarıda (ve cevabında) yollar / göreli yollar / sembolik yollar ( ~) ile ilgili söylediği KRİTİK OLARAK ÖNEMLİDİR - Lütfen cron ve crontab man sayfalarıyla biraz zaman geçirin ve neler olup bittiğini anladığınızdan emin olun (şüpheniz varsa) , bunu yapan bir cron işi oluşturun echo "what you want to do" > /tmp/what-i-would-runve aklı başında olduklarından emin olmak için sonuçlara bakın - Evreni yok etme şansı çok daha az.)
voretaq7

Yararlı ipuçları için teşekkürler, bana daha fazla fikir verdi!
tvgemert

6

İki konu:

1) Yollar normalde cron'da oturum açtığınız gibi kurulmaz. / Usr / bin / sudo / bin / chown ... (ya da sisteminizdeki programların doğru yolları ne olursa olsun).

2) sudo normalde şifrenizi sorar veya etkileşimli olarak çalışmamaktan memnun olmayabilir. Komutları sudo olmadan root'un crontab'ına koymanızı öneririm, sonra komutlar root olarak çalışır.


5

Crontab'ınızla ilgili birden fazla sorun var:

10 * * * sudo chown -R $USER ~/Dropbox

Sorunlar:

  • sudoburada kullanılmamalıdır; terminal girişi gerektirir
  • chowntam olarak belirtilmelidir (yani /bin/chown)
  • USERgerçek bir değişken olmayabilir; bazı sistemler kullanırLOGNAME
  • ~(tilde) sadece bir kabuk tarafından tanınır - çıplak bir chownşey onu anlamaz
  • root'un crontab'ında HOME belirtmek root'un evine gider

Ben aslında bunu senaryo olurdu düşünüyorum:

#!/bin/bash

# FILE: /usr/local/bin/myscript

USER=$1
eval chown -R $1 ~$1/Dropbox
eval chmod -R u+rw ~$1/Dropbox

( evalDönüştürmek için gereklidir ~$1için ~user daha sonra için /home/user).

Bu komut dosyasını kökün crontab'ından çalıştırın:

# root's crontab
10 * * * /usr/local/bin/myscript someuser

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.