[Çözüldü] crontab ve python script

Başlatan msegmx, 29 Nisan 2009 - 23:09:29

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

msegmx

/etc/crontab :

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#0,5,10,15,20,25,26,30,35,40,45,50,55 * * * * mserkan python /home/mserkan/.myscripts/randomwallpaper.py
* * * * * mserkan python /home/mserkan/.myscripts/randomwallpaper.py >/home/mserkan/.myscripts/myscript.log 2>&1
#


script doyası ise :

/home/mserkan/.myscripts/randomwallpapers.py :

#!/usr/bin/env python

from os import listdir, system
from random import sample

#get list of files in /mnt/Work/resources/visuals/wallpapers/
fileList = listdir("/mnt/Work/resources/visuals/wallpapers/")
#randomly choose one
theChosenOne = sample(fileList, 1)
#set wallpaper
system('gconftool-2 --type string --set /desktop/gnome/background/picture_filename "/mnt/Work/resources/visuals/wallpapers/' + str(theChosenOne[0]) + '"')
#scale wallpaper
system('gconftool-2 --type string --set /desktop/gnome/background/picture_options "zoom"')

ls -l output ise şöyle :

mserkan@UbuntuPC:~/.myscripts$ ls -l
total 8
-rw-r--r-- 1 mserkan mserkan 0 2009-04-29 18:21 myscript.log
-rwxr-xr-x 1 mserkan mserkan 539 2009-04-29 17:50 randomwallpaper.py
-rw-r--r-- 1 mserkan mserkan 593 2009-04-29 17:49 randomwallpaper.py~
mserkan@UbuntuPC:~/.myscripts$


terminalede şu komutu çalıştırdığımda : mserkan@UbuntuPC:~/.myscripts$ python randomwallpaper.py script çalışıyor, duvar kağıdı da anında değişiyor.

myscript.log dosyasını sildiğimde ise her dakikada bir yenisi oluşuyor, yani crontab aslında script'imi çalıştırıyor. oluşan log dosyası ise boş, yani hata oluşmuyor.

ubuntu 8.04 de çalışıyordu, fakat 9.04 'te çalıştıramadım. kendim terminalde çalıştırdığımda çalışıyor. fakat crontab içerisinden çalışıtrmak istediğimde ise çalışmıyor.

bu konuda yorum getirebilecek kimse var mı ?

localhost

Alıntı yapılan: msegmx - 29 Nisan 2009 - 23:09:29
/etc/crontab :

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#0,5,10,15,20,25,26,30,35,40,45,50,55 * * * * mserkan python /home/mserkan/.myscripts/randomwallpaper.py
* * * * * mserkan python /home/mserkan/.myscripts/randomwallpaper.py >/home/mserkan/.myscripts/myscript.log 2>&1
#


script doyası ise :

/home/mserkan/.myscripts/randomwallpapers.py :

#!/usr/bin/env python

from os import listdir, system
from random import sample

#get list of files in /mnt/Work/resources/visuals/wallpapers/
fileList = listdir("/mnt/Work/resources/visuals/wallpapers/")
#randomly choose one
theChosenOne = sample(fileList, 1)
#set wallpaper
system('gconftool-2 --type string --set /desktop/gnome/background/picture_filename "/mnt/Work/resources/visuals/wallpapers/' + str(theChosenOne[0]) + '"')
#scale wallpaper
system('gconftool-2 --type string --set /desktop/gnome/background/picture_options "zoom"')

ls -l output ise şöyle :

mserkan@UbuntuPC:~/.myscripts$ ls -l
total 8
-rw-r--r-- 1 mserkan mserkan 0 2009-04-29 18:21 myscript.log
-rwxr-xr-x 1 mserkan mserkan 539 2009-04-29 17:50 randomwallpaper.py
-rw-r--r-- 1 mserkan mserkan 593 2009-04-29 17:49 randomwallpaper.py~
mserkan@UbuntuPC:~/.myscripts$


terminalede şu komutu çalıştırdığımda : mserkan@UbuntuPC:~/.myscripts$ python randomwallpaper.py script çalışıyor, duvar kağıdı da anında değişiyor.

myscript.log dosyasını sildiğimde ise her dakikada bir yenisi oluşuyor, yani crontab aslında script'imi çalıştırıyor. oluşan log dosyası ise boş, yani hata oluşmuyor.

ubuntu 8.04 de çalışıyordu, fakat 9.04 'te çalıştıramadım. kendim terminalde çalıştırdığımda çalışıyor. fakat crontab içerisinden çalışıtrmak istediğimde ise çalışmıyor.

bu konuda yorum getirebilecek kimse var mı ?

#0,5,10,15,20,25,26,30,35,40,45,50,55 * * * * mserkan python /home/mserkan/.myscripts/randomwallpaper.py basinda bulunan # isaretini silip deneyin.
Linux LPIC1 - MCSA

msegmx

o satır bir alttaki satırın aynısı, 5er dakika beklememek için test amaçlı *'lı olanını kullanıyorum.

şimdi :

/etc/crontab 'daki 2 satırı kaldırdım. crontab -e komutunu çalıştırdım. nano editor açıldı boş olarak. sonra o 2 satırı (1'i commentli) yapıştırdım ve ctrl + x ile kapattım. crontab oluşturuldu diye mesaj verdi.

şuan her dakika log dosyası oluşturuyor. yani lokal crontab'ım her dakika script'i çalıştırıyor fakat ne hata veriyor ne de duvar kağıdı değişiyor.

nerde hata yapmış olabilirim ? yardımcı olursanız sevinirim.

localhost

Ben bu islerden anlamiyorum sadece yorumlayabildigim kadari ile yardim edebilirim. Asagidaki kodda 1 neyi ifade ediyor.

theChosenOne = sample(fileList, 1)
Linux LPIC1 - MCSA

msegmx

Alıntı yapılan: Kirmizi - 30 Nisan 2009 - 02:00:22
Ben bu islerden anlamiyorum sadece yorumlayabildigim kadari ile yardim edebilirim. Asagidaki kodda 1 neyi ifade ediyor.

theChosenOne = sample(fileList, 1)

1 tane dosya seç anlamındadır.

heartsmagic

Konu ilgimi çekti ancak görüğüm şudur ki problem python kaynaklı değil. Aynı şeyi bash ile yapmaya çalıştığında da işe yaramıyor. Elle çalıştırdığımızda çalışmakta betik. Kısacası bakınmamız gereken konu muhtemelen gconftool-2.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

msegmx

konunun/linuxun uzmanı olmadığımı belirteyim baştan.
evet, başka forumlarda okuduğum kadarı cron ile terminal arasında environment değişiklikleri varmış.
terminalden python scripti çalıştırdğımda ise çalışıyor, cron ise python scripti çalşıtırıyor fakat, dediğiniz gibi gconftool-2 de değişiklik yapamıyor. yetkisi mi yok artık bilemiyorum.

bunu yaparken hata da vermiyor. şöyleki, script içerisinde print "1" "2" ... gibi debug kodları eklediğimde ve cron çalışmasının çıktısını bir log dosyasına yönlendirdiğimde ise bu debug ları görebiliyorum. yani log dosyasında 1 2 3 gibi rakamları görünüyor.

işin ilginç tarafı, ubuntu 8.04 de bu çalışıyordu sorunsuz. bugün bir de 8.10 da denedim orda da çalışmadı. 9.04 de de zaten olmuyor.
ubuntu sürümlerinde cron anlayışında birşeyler değişmiş olmalı.

log dosyasında da hata belirtmediğinde göre python başarılı bir şekilde scripti çalıştırıyor. dediğiniz gibi cron ile gconftool-2 arasındaki ilişkiye bakmak lazım.

yorum getiremiyorum artık, bilene sormak lazım.

heartsmagic

Ben biraz daha bakındım da sorun neden kaynaklanıyor bulamadım. Fakat çözümü buldum. En son kaynağı vereceğim sen İngilizce'ye hakim olduğundan kendin yapabilirsin buna eminim. Zira uluslararası forumda soru sormuşsun, yorum yapmışsın :) Ancak İngilizce bilmeyen arkadaşlar için burası da referans olsun.

1.

gedit ~/Xdbus_yap

ile ev dizini altında Xdbus_yap adında bir dosya oluşturulur. İçine şunlar yazılır:

#!/bin/bash
# Export the dbus session address on startup so it can be used by cron
touch $HOME/.Xdbus
chmod 600 $HOME/.Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.Xdbus
# Export XAUTHORITY value on startup so it can be used by cron
env | grep XAUTHORITY >> $HOME/.Xdbus
echo 'export XAUTHORITY' >> $HOME/.Xdbus


Kaydedilir, kapatılır.

2.

chmod +x ~/Xdbus_yap


ile çalıştırma hakkı verilir.

3. Sistem-Tercihler-Başlangıç Uygulamalarına bir yenisi eklenir ve komut olarak bu dosya gösterilir.

4. Çıkış yapılır ve yeniden Gnome'a girilir. Eğer her şey yolundaysa ev dizini altında gizli bir .Xdbus dosyası oluşur. Teyidi için şuna bakılır:

ls -l .Xdbus

Aşağıdaki gibi bir çıktı verir:


-rw------- 1 serkan serkan 184 2009-05-02 05:51 .Xdbus


5. crontab satırı şu şekilde değiştirilir:


* * * * * . /home/kullanıcı_adı/.Xdbus; /betik/neredeyse.py >| OUT_BACKGROUND 2>&1


Not: * * * * * 'dan sonraki noktaya dikkat!

Bende şu anda çalışıyor betik. Senin python betiğini kullandım.

Kaynak:
http://ubuntuforums.org/showpost.php?p=5996758&postcount=12
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

localhost

Valla böyle birsey aklima geldi ama Xdbus betik olarak düsünmemistim :) Düsünceme yakin oldugu icin sevindim :)
Linux LPIC1 - MCSA

msegmx

denedim oldu valla, teşekkürler ilgilendiğin için.

bir yandan sevindim diğer yandan üzüldüm diyebilirim. çalıştığı için mutlu oldum tabi de eskiden 'linux ne güzel, bir process var, çalıştırmak istediğin programları/script'leri oraya tanıtıyorsun kendisi çalıştırıyor' diyordum.
şimdi bakıyorum değiştirmişler.

X'in ne demek olduğunu aşağı yukarı biliyorum da (nam-ı diğer wolverine :)) Xdbus'u sormicam artık beni aşar.

ama betik nedir ? ilk defa duyuyorum valla.

localhost

Linux LPIC1 - MCSA

heartsmagic

betik=script :)

@msegmx, aslında mantık hâlâ aynı. Fakat açık kaynaklı yazılımlar hızla geliştiğinden bazen birbirlerini takip etmeleri güçleşiyor. Ara ara böyle uyuşmazlıklar yaşanabiliyor işte. İleride umarım sorun bir şekilde bu düzenlemeyi yapmadan düzelmiş olur. Şimdilik başlığı etiketleyip kapatabiliriz sanıyorum.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

msegmx

konu çözüldü, bana soruyorsanız kitleyebilirsiniz.

kolay gele :)

heartsmagic

Teşekkürler. Bu arada ben de kullanmaya devam ediyorum bu betiği.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.