Cron'da kaçan karakterler


9

Aşağıdaki komut isteminden beklendiği gibi çalışır. Ama crondan işe yaramıyor.

mysqldumpslow <(tail -1000 `mysqladmin variables \
    | grep slow_query_log_file | awk '{print $4}'`) \
    | mail -s "slow log from `hostname` sorted by time" shantanu.oak`hostname`@gmail.com \
    > /root/slow_succ.txt 2> /root/slow_err.txt

Aşağıdaki hatayı alıyorum:

/bin/sh: -c: line 0: syntax error near unexpected token `('

Bazı karakterlerin cron'da kaçması gerekiyor mu? Yoksa cron'daki subshell ile ilgili bir sorun mu var?


Serverfault.com/questions/274475/… kopyası ?
Hubbitus

Yanıtlar:


13

Bu komutu iki nedenden ötürü bir senaryoya koyacağımı belirterek SvenW'nin söylediklerini genişleteceğim :

  1. Crontab'da kaçan karakterlerle ilgili sorunları önler.
  2. Yöneticilerinize, işin yarattığınız tek katmanlı sihrin şifresini çözmeden döngülerini boşa harcamadan ne yaptığını açıkça belirtmenizi sağlar. Senaryoyu çağırmak gibi /root/bin/dump_mysql_tables_and_email_failure_report.sh. Sen diğer yöneticilerle bir ortamda olmayabilir, ama bu hatırlatmak hizmet edecek sizi size bugünden itibaren bir yıl ne düşünüyordun halt! :)

2
"Bundan bir yıl sonra ne düşünüyorsun!"
Tonny

5

Cron kaçış problemleri için en kolay çözüm: Komutu kendi kabuk betiğine koyun ve bu betiği cron'dan çağırın.


5

İşe yaramamasının nedeni bu crondeğildir bash. Parantez kullanarak alt kabuk oluşturmak bash sözdiziminin bir parçasıdır. Bunun ipucu, hata mesajının ilk "sözcüğü" nde bulunur.

Backticks, subshell'inizde backticks kullanmanız dışında bir subshell oluşturmak için çalışır, böylece bunları tekrar kullanamazsınız.

Diğerlerinin söylediği gibi, bir senaryo yazın ve bunu cron'dan arayın.

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.