Crontab python betiğini çalıştırmıyor, hata yok, hiçbir şey yok


1

Bu kolay şeyi yapmak için 1 saatten fazla zaman geçti ve tamamen başarısız oldu:

Komut satırında mükemmel çalışırken bu python'un crontab üzerinde çalışmadığını neden anlayamıyorum ...

Betik (bash):

#!/bin/bash

touch before_zzz_text.txt # to check if cron works at all 
ls > "before_zzz_text.txt" # just to check if I'm in the correct directory

/root/anaconda3/bin/python -V > pv.txt # this is empty! or a white char

touch after_zzz_text.txt # this works new file every minute

Bu şekilde cronda çalıştığını biliyorum (her iki dakikada da oluşturulan - .xt dosyaları - cron her dakika çalışıyor gibi).

Ancak pv.txt boş ... bash script çalışmıyor gibi görünüyor?

Sonunda bash betiğinde daha karmaşık bir betiğin çalışmasını istiyorum ancak neden basit olmadığını göstermek için neden işe yaramadığını kazmaya çalıştım "/ root / anaconda3 / bin / python -V '


/root/anaconda3/bin/pythonPython komut dosyası? Bu kafa karıştırıcı, çünkü pythonkoşmak istediğiniz işleyici. İle mi başlıyor mu #!/usr/bin/python? Dizin bileşenlerinin tümü ve tüm yürütme izinleri var mı? crontabÇevre terminalinizle aynı olmadığı için bu önemlidir . Eğer .txtdosyalar önceden silindi, hangi izinleri ve kullanıcı / grup isimleri ile oluşturulan vardı?
AFH

"/ root / anaconda3 / bin / python" python yorumlayıcısı için yoldur. Daha önce sadece "python" idi ama doğru env yolunu veya sth'yi bulamamasına rağmen. Yine de sadece "python -V> pv.txt" ile çalışmaz. Ayrıca hata mesajı yok, pv.txt ic dosyası boş bırakıldı ... Öyle mi olmalı? "python -V sadece python versiyonunu vermeli ve"> pv.txt "bu mesajı sonunda boş kalan
dosyada saklamalıdır

Üzgünüm, kafam karıştı, çünkü /root/anaconda3/bin/tercüman için olası bir yer değil. Bir hata yorumlayıcının çalışmasını engellerse boş bir günlük dosyası oluşturulur. Hataları görmek 2>&1için pythonaramanın sonuna ekleyin .
AFH

Sonunda hiçbir sorun çözülmedi! Ubuntu sunucusundaki kayıp MTA etrafı karıştırıyormuş gibi görünüyor. Python hattına "2> & 1" eklendikten sonra çalışır !!!!
kkonrad

Sürümün yazıldığını fark etmemiştim stderr: senin gibi, açık olacağını varsaymıştım stdout, ama bunu kendi sistemimle doğruladım. İşinde olmana sevindim. Sanırım sitenin diğer kullanıcılarının yararına bir cevap vereceğim.
AFH

Yanıtlar:


3

Biraz tartışmadan sonra (yukarıdaki yorumlara bakınız), temel sorunun, pythonsürüm metnini stderrbeklenen stdout, hiçbir şeyin yazılı olmadığı ve dolayısıyla boş dosyaya yazdığı anlaşılıyor .

Genel olarak, crontabproblemleri teşhis ederken , hataları olduğu kadar çıktıları da aynı veya farklı bir dosyaya kaydetmek iyi bir fikirdir. Çağrı satırının 2>&1sonuna ekleyerek python, sürüm metni şöyle görünür pv.txt:

/root/anaconda3/bin/python -V > pv.txt 2>&1
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.