2015-11-22 2 views
1

Я запускаю Ubuntu Server 14.04, и я пытаюсь запустить скрипт оболочки при загрузке. Проблема заключается в том, что для скрипта требуются args, один из которых - это файл (база данных), а другой - номер порта, который находится в той же папке, что и скрипт. Я довольно новичок в этом.Ubuntu: запуск скрипта оболочки с помощью args при загрузке

Когда я иду в папку в терминале, например, я могу напечатать:

sh script.sh potato 1234 

script.sh является сценарий, картофель является имя файла, и номер порта. Хорошо работает, когда я делаю это вручную.

Я попытался добавить crontab, @reboot script.sh potato 1234, конечно, он не сработал, он не смог найти скрипт.

Так что я пробовал:

@reboot */path/to/my/script.sh* potato 1234 

снова не работает. Понял, что он не смог найти базу данных.

Так что я пробовал:

@reboot path/to/my/script.sh /path/to/my/potato 1234 

Еще нет костей.

Я попытался запустить его в перспективе с путями, а

sh path/to/my/script.sh potato 1234 

конечно не удалась - сценарий и сказал мне, что не может найти базу данных, как это должно быть.

sh /path/to/my/script.sh /path/to/my/potato 1234 не было ошибок, но оно не начиналось.

Это то, что сценарий я пытаюсь запустить выглядит следующим образом:

if [ $# -lt 1 -o $# -gt 2 ]; then 
    echo 'Usage: restart dbase-prefix [port]' 
    exit 1 
fi 

if [ ! -r $1.db ]; then 
    echo "Unknown database: $1.db" 
    exit 1 
fi 

if [ -r $1.db.new ]; then 
    mv $1.db $1.db.old 
    mv $1.db.new $1.db 
    rm -f $1.db.old.Z 
    compress $1.db.old & 
fi 

if [ -f $1.log ]; then 
    cat $1.log >> $1.log.old 
    rm $1.log 
fi 

echo `date`: RESTARTED >> $1.log 
nohup ./moo $1.db $1.db.new $2 >> $1.log 2>&1 &`` 

Любые подсказки?

+0

Выполнить 'ш -х/path/to/my/script.sh/path/to/my/potato 1234' и посмотреть, что вы получаете как команды, которые выполняются? Где он останавливается/терпит неудачу? –

+0

Спасибо, что посмотрели! Это: '+ [2 -lt 1 -o 2 -gt 2] + [! -r/path/to/my/картофель.db] + [-r /path/to/my/potato.db.new] + mv /path/to/my/potato.db /path/to/my/potato.db.old + mv/path /to/my/potato.db.new /path/to/my/potato.db.db + rm -f /path/to/my/potato.db.old.Z + [-f/path/to /my/potato.log] + cat /path/to/my/potato.log + rm /path/to/my/potato.log + compress /path/to/my/potato.db.old /path/to/my/script.sh: 32: /path/to/my/script.sh: compress: не найден + дата + echo Sun Nov 22 23:08:07 GMT 2015: RESTARTED root @ moodev:/# + nohup ./moo /path/to/my/potato.db /path/to/my/potato.db.new 7777' – Koz

+0

Я не могу разбивать строки. Здесь также задаются новые вопросы. Кажется, он обманывает компресс. Лемм посмотрю, если он дерьмо там, если я запустил скрипт в своей папке. – Koz

ответ

1

Вам необходимо увидеть выходные данные вашей программы. cron отправляет вывод владельцу crontab или адресу, указанному в переменной окружения MAILTO, поверх crontab.

Будьте осторожны при выполнении среды. Как правило, большинство основных переменных среды (PATH, HOME и т. Д.) Не будут установлены и могут привести к ошибкам выполнения.

Для получения дополнительной информации посетите страницу cron человек:

man 5 crontab 

Эти сообщения также могут помочь вам: