bash - как передать значения arg скрипту оболочки внутри cronjob - PullRequest
2 голосов
/ 11 мая 2011

У меня есть запись cron, которая выглядит следующим образом: (передавая 5 входов)

30 10 * * 5 sh /home/test.sh hostnm101.abc /mypath/dir test foobar F008AR >> /logs/mytst.log 2>&1

Я хочу изменить это, чтобы сохранить входы (4,5) foobar и F008ARв отдельном файле и считывается скриптом test.sh ($ 4, $ 5)

test.sh

#!/bin/bash

if [ $# != 5 ]; then
    exit 1
fi

DIRDT=`date '+%Y%m%d'`
TSTDIR=$2/test/$DIRDATE
[ ! -d "$TSTDIR" ] && ( mkdir "$TSTDIR" || { echo 'mkdir command failed'; exit 1; } )

perl /home/dev/tstextr.pl -n $1 -b $2 -d $TSTDIR/ -s $3 -u $4 -p $5 -f $DIRDT

Есть ли простой способ сделать это в cron для тех (2) входные значения?Спасибо.

Ответы [ 2 ]

1 голос
/ 11 мая 2011

Хорошо, попробуйте этот способ.

1) Создайте отдельный файл /mypath/dir/login.info с таким содержимым (имя пользователя / пароль в отдельных строках):

foobar
F008AR


2)Измените свой test.sh следующим образом:

#!/bin/bash
if [ $# != 4 ]; then
    exit 1
fi

DIRDT=`date '+%Y%m%d'`
TSTDIR=$2/test/$DIRDATE
[ ! -d "$TSTDIR" ] && ( mkdir "$TSTDIR" || { echo 'mkdir command failed'; exit 1; } )

IFS="
"
arr=( $(<$2/$4) )
#echo "username=${arr[0]}   password=${arr[1]}"

perl /home/dev/tstextr.pl -n $1 -b $2 -d $TSTDIR/ -s $3 -u ${arr[0]} -p ${arr[1]} -f $DIRDT


3) Используйте команду cron следующим образом:

30 10 * * 5 sh /home/test.sh hostnm101.abc /mypath/dir test login.info >> /logs/mytst.log 2>&1

Сводка

  • IFS стоитдля внутреннего разделителя полей (IFS) в bash

Я использую его следующим образом:

IFS="
"

Что означает создание символа новой строки в качестве разделителя полей (поскольку мы храним имя пользователя ипароль в 2 отдельные строки).А затем эта строка для чтения файла /mypath/dir/login.info в массив:

arr=( $(<$2/$4) )
  • Первая строка (имя пользователя) читается в $arr[0]
  • Вторая строка (пароль) читаетсяв $arr[1]

Вы можете повторить его, чтобы проверить прочитанное содержимое:

echo "username=${arr[0]}"
echo "password=${arr[1]}"
0 голосов
/ 11 мая 2011

cron выполняется с sh -c так:

sh /home/test.sh hostnm101.abc /mypath/dir test `cat /mypath/dir/foobar_file` `cat /mypath/dir/F008AR_file` >> /logs/mytst.log 2>&
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...