\{7\}
конструкция является простым случаем \{m,n\}
для "соответствия, по крайней мере, m
и самое большее n
, в Вашем случае это будет:
sed -e 's/\(AAAA[A-Z]\{2\}[0-9]\{7,8\}\)XXXX/\n\1/g'
Возможно, простое:
sed -s 's/XXXX//g'
находится достаточно в Вашем случае?
Вы должны поместить свой скрипт в отдельный каталог, который наверняка доступен во время выполнения задания cron, например /usr/local/bin/
.
Также хорошей традицией является запись crontab
таких записей:
M H * * * test -x /usr/local/bin/myscript.sh || /usr/local/bin/myscript.sh
, чтобы crontab даже не пытался выполнить скрипт, если он недоступен.
Вы заподозрили, что проблема в выходе из системы, что вам также следовало попробовать, так это выйти из системы, а затем вернуться назад во время выполнения кронтаба, а затем наблюдать. Таким образом, вы могли бы сузить круг задач, если выход из системы был проблемой или не входил в систему.
Файл журнала показывает, что задание crontab было запущено:
Nov 6 09:50:01 python CRON[30936]: (user) CMD (/home/user/scripts_automated/crontab1.sh)
И через мгновение было отправлено электронное сообщение:
Nov 6 09:50:01 python sendmail[30938]: sA68o1a4030938: from=user, size=347, class=0, nrcpts=1, msgid=<201411060850.sA68o1a4030938@python>, relay=user@localhost
Следующая строка в лог-файле почти наверняка была бы дополнительной половиной к этой, показывающей, куда она шла.
В чем актуальность письма? CRON захватывает stdout и stderr при каждом запуске задания. Если какой-либо из них не пуст -, он отправляет сообщение электронной почты на локальную учетную запись электронной почты пользователя, содержащее захваченный текст. В случае user
это будет локальная учетная запись электронной почты user
. (Если у вас настроена подсистема электронной почты, она может быть переадресована -за пределы сайта, но давайте предположим, что не сейчас. )Локальная электронная почта обычно записывается в файл /var/mail/$USER
или /var/spool/mail/$USER
. Это текстовый файл, и новые сообщения просто добавляются, поэтому вы можете использовать more
, less
или даже cat
для просмотра файла. Последнее сообщение было бы тем, которое вы хотели прочитать.
Глядя на созданный вами сценарий, я подозреваю, что в вашем случае сгенерированное сообщение об ошибке было бы примерно таким:
-sh: /home/user/scripts_automated/crontab1.sh: Permission denied
Если это так, то это потому, что вы пытаетесь запустить crontab1.sh
как программу, но не сделали ее исполняемой. Исправьте это с помощью chmod a+x /home/user/scripts_automated/crontab1.sh
.
Другие ошибки могут быть связаны с отсутствующими переменными среды, в том числе PATH
не установленными, как вы ожидаете. Это связано с тем, что cron
имеет очень ограниченную среду и не использует файлы запуска, такие как .bashrc
, .profile
и т. д. Другая возможность заключается в том, что ваш домашний каталог может быть зашифрован, когда вы не вошли в систему. В этом случае cron
не сможет найти сценарий для выполнения, поэтому он может только завершиться ошибкой. Есть много вопросов (и ответов )по https://unix.stackexchange.com/, касающихся подобных проблем, поэтому я не буду их здесь повторять.
Еще одна проблема, с которой я столкнулся с вашим скриптом, обычно заключается в том, что он должен начинаться с #!
, а затем указывать путь к его интерпретатору.Если это bash
, вы обычно пишете #!/bin/bash
, если это sh
, вы используете #!/bin/sh
. Если вы начнете с # 0 ------------------------------------------------------
, система не поймет, как запустить ваш сценарий.
(Шесть лет спустя это станет ответом для будущих читателей)