Утеча символів у кроні


9

У командному рядку працює наступне, як очікується. Але це не працює з крона.

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

Я отримую таку помилку:

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

Чи потрібно певних персонажів уникнути в кроні? Або це проблема із підзарядкою в cron?


Відповіді:


13

Я розкрию те, що сказав SvenW , заявивши, що я вставлю цю команду в сценарій з двох причин:

  1. Це дозволяє уникнути будь-яких проблем із втеченими символами в crontab.
  2. Це дозволяє чітко вказати своїм колегам-адміністраторам, що робить робота, не витрачаючи жоден їхній цикл на розшифровку створеної вами магії з одним вкладишем. Наприклад, виклик сценарію /root/bin/dump_mysql_tables_and_email_failure_report.sh. Можливо, ви не знаходитесь в оточенні інших адміністраторів, але це допоможе нагадати вам про те, що ви думали за рік! :)

2
Кудо за "що за чорт ти думав рік відтепер!".
Тонні

5

Найпростіше рішення для вирішення проблем, пов’язаних із вирішенням Cron: Введіть команду у свій власний скрипт оболонки та просто зателефонуйте цьому сценарію з cron.


5

Причина, що це не працює, це те, що cronце не так bash. Створення підшару за допомогою дужок є частиною синтаксису bash. Підказки в цьому є в першому "слові" повідомлення про помилку.

Заднi посилання працюватимуть над тим, щоб створити нижню частину оболонки, за винятком того, що ви вже використовуєте зворотнi посилання в межах своєї передшвидшої оболонки, щоб ви не могли їх використовувати знову.

Як уже сказали інші, напишіть сценарій і зателефонуйте йому з cron.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.