Если у вас есть сценарий, который работает правильно при запуске из командной строки в оболочке, но не запускается из cron
, вы можете есть проблема со средой, в которой работает cron
. Попробуйте добавить:
2> /tmp/error.txt
В конец вашего оператора, который не будет выполняться в cron
, чтобы узнать, какие ошибки происходят во время исполнение. Выполните команду с помощью cron
и прочтите содержимое файла /tmp/error.txt
.
Когда у меня возникла проблема с запуском rsync
из файла cron
, я получил следующий вывод в моей ошибке .txt
файл:
ld.so.1: rsync: fatal: libiconv.so.2: open failed: No such file or directory.
Проблема заключалась в том, что среда не была настроена на поиск необходимых библиотек для выполнения команды. Я добавил оператор переменной среды LD_LIBRARY_PATH
в начало моего сценария, чтобы установить для переменной LD_LIBRARY_PATH
то же значение, что и в моем файле .profile
поскольку сценарий выполнялся правильно, когда я запускал его из оболочки, используя свой профиль.
"export LD_LIBRARY_PATH="/usr/lib:/usr/local/lib"
После этого все заработало. Моя программа rsync
работает вне / usr / local / lib
, поэтому я предполагаю, что ссылка на эту область была той, которая решила мою проблему. У вас также могут быть другие проблемы с путями, если вы не используете полный путь при обращении к другим файлам в вашем скрипте.
Вот так:
$ awk '{print} !(NR%2){if($2 == last) print "Match"; else print "Not"} {last = $2}' file
transcr_15824 -
YML042W -
Match
transcr_18545 -
YCR105W +
Not
transcr_16934 +
YDR032C +
Match
transcr_15237 +
YDL008W -
Not
perl -pae '($_.= <>).= qw/NO MATCH/[0+/\n.*\s\Q$F[1]\E$/]. $/' input
Perl работает в режиме автоматического разделения. 2-е поле $F[1] сравнивается в следующей строке, <>, и в зависимости от наличия совпадения или отсутствия совпадения добавляется к текущей строке $_.