LINUX.ORG.RU

Не работает bash скрипт

 


0

1

Добрый день. Хотел автоматизировать установку заббикс в bash скрипте. Но столкнулся с проблемой. На этапе скачивания wget (через bash) не скачивается файл. Точнее выдаёт ошибку Http request sent, awaiting response… 404 Not Found ERROR 404: Not Found. Не знаю как это победить. Если же просто запускать без bash то файл нормально скачивается. С ключами команды wget также поигрался. Безрезультатно. Есть следующий сценарий

#!/usr/bin/bash

#Download

wget "https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1%2Bfocal_all.deb"
dpkg -i zabbix-release_5.0-1+focal_all.deb
apt update
apt upgrade

#Install Zabbix server, frontend, agent, database, httpd

apt install zabbix-server-mysql
apt install zabbix-frontend-php
apt install zabbix-apache-conf
apt install zabbix-agent
apt install mysql-server

#Create DB (example1)

mysql -uroot -p <<EOF
create database zabbix character set utf8 collate utf8_bin;
create user 'zabbix'@'localhost' identified by 'password';
grant all privileges on zabbix.* to 'zabbix'@'localhost';
EOF

#Import initial schema and data

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

#Configure the database for Zabbix server

echo DBPassword=password >> /etc/zabbix/zabbix_server.conf

#Configure frontend

sed -i 's:# php_value date.timezone.*:php_value date.timezone Europe\/Riga:g' /etc/zabbix/apache.conf;

#Start zabbix server processes start at system boot

systemctl restart zabbix-server zabbix-agent apache2
systemctl enable zabbix-server zabbix-agent apache2

Открой пожалуйста форму добавления комментария на форум, прочти внимательно текст который располагается под полем для ввода текса комментария. Найди там две ссылки и изучи разметку применяемую для оформления сообщений на форуме. Используй одну из разметок, отредактируй комментарий и перед помещением его на форум нажми кнопку предпросмотр и удостоверься, что твой комментарий нормально выглядит.

kostik87 ★★★★★ ()
Ответ на: комментарий от dottram

Молодец конечно, но ты поленился. Там есть разметка для оформления кода. А ты просто кучу двойных переводов строк вставил.

А ссылку возьми в одинарные кавычки в скрипте.

И что вот это за шляпа?

#!/usr/bin/bash
#Download wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1%2Bfocal_all.deb
dpkg -i zabbix-release_5.0-1+focal_all.deb

Должно быть вот так:

#!/usr/bin/bash
#Download
wget 'https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1%2Bfocal_all.deb'
dpkg -i zabbix-release_5.0-1+focal_all.deb

Или двойные

#!/usr/bin/bash
#Download
wget "https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1%2Bfocal_all.deb"
dpkg -i zabbix-release_5.0-1+focal_all.deb

Хотя, ты наверное даже не читал, а просто «энтеров» понатыкал.

kostik87 ★★★★★ ()
Последнее исправление: kostik87 (всего исправлений: 3 )

ERROR 404: Not Found.

Конечно not found, у тебя же битый урл там. В нём перевод строки в середине.

Если же просто запускать без bash то файл нормально скачивается.

А ещё - баш не для скриптов, это интерактивный шелл. Скрипты надо с #!/bin/sh -e начинать.

firkax ★★★ ()
Ответ на: комментарий от dottram

Отладьте команду скачивания в консоли сначала, а потом скопируйте в скрипт.

unDEFER ★★★★★ ()
Ответ на: комментарий от dottram

Ну вот смотрите:

$ wget "https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1%2Bfocal_all.deb"
--2022-09-10 00:48:15--  https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1%2Bfocal_all.deb
Распознаётся repo.zabbix.com (repo.zabbix.com)… 178.128.6.101, 2604:a880:2:d0::2062:d001
Подключение к repo.zabbix.com (repo.zabbix.com)|178.128.6.101|:443... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 4244 (4,1K) [application/octet-stream]
Сохранение в: ‘zabbix-release_5.0-1+focal_all.deb’

zabbix-release_5.0- 100%[===================>]   4,14K  --.-KB/s    за 0s      

2022-09-10 00:48:16 (436 MB/s) - ‘zabbix-release_5.0-1+focal_all.deb’ сохранён [4244/4244]

Работает же!

unDEFER ★★★★★ ()
Ответ на: комментарий от dottram

Ну такому может быть только одно объяснение - вы что-то не так скопировали в скрипт.

Если хотите, кидайте куда-то скрипт прямо файлом, так можно будет что-то проверить.

unDEFER ★★★★★ ()
Ответ на: комментарий от dottram
root@dott-Standard-PC-i440FX-PIIX-1996:/home/dott/Desktop# bash bash_script2.sh
--2022-09-10 01:06:29--  https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1%2Bfocal_all.deb%0D
Resolving repo.zabbix.com (repo.zabbix.com)... 178.128.6.101, 2604:a880:2:d0::2062:d001
Connecting to repo.zabbix.com (repo.zabbix.com)|178.128.6.101|:443... connected.
HTTP request sent, awaiting response... 404 Not Found
2022-09-10 01:06:30 ERROR 404: Not Found.

root@dott-Standard-PC-i440FX-PIIX-1996:/home/dott/Desktop# 
dottram ()
Ответ на: комментарий от dottram

У тебя переводы строк - Dos «\r\n». Видимо в этом беда. dos2unix чтобы починить.

unDEFER ★★★★★ ()
Ответ на: комментарий от unDEFER
oot@dott-Standard-PC-i440FX-PIIX-1996:/home/dott/Desktop# ls
bash_script2.sh       bash_script3.sh  folder
bash_script2.sh.save  bash_script.sh
root@dott-Standard-PC-i440FX-PIIX-1996:/home/dott/Desktop# ls -l
total 20
-rwxrwxrwx 1 dott dott  128 сен 10 00:55 bash_script2.sh
-rwxrwxrwx 1 dott dott  236 сен  9 20:51 bash_script2.sh.save
-rw-r--r-- 1 root root   83 сен  9 20:34 bash_script3.sh
-rwxrwxrwx 1 dott dott 1188 сен  9 20:02 bash_script.sh
drwxr-xr-x 2 root root 4096 сен  9 20:41 folder
root@dott-Standard-PC-i440FX-PIIX-1996:/home/dott/Desktop# chmod a+x bash_script2.sh
root@dott-Standard-PC-i440FX-PIIX-1996:/home/dott/Desktop# ./bash_script2.sh
bash: ./bash_script2.sh: /bin/bash^M: bad interpreter: No such file or directory
root@dott-Standard-PC-i440FX-PIIX-1996:/home/dott/Desktop# 

Prava est. Cherez ./bash_script2.sh ne rabotaet. dos2unix ne sosvsem ponyal.

dottram ()
Ответ на: комментарий от dottram

Пожалуйста!

Для справки. В DOS/Windows принят разделитель строк состоящий из двух символов:

«\r» - возврат каретки;

«\n» - собственно «новая строка»;

В Unix/Linux обычно используется разделитель строк из одного «\n».

Судя по всему вы создали скрипт в Windows, а Linux воспринял переводы кареток как часть строки (часть названия оболочки, часть URL’а), поэтому не работало.

unDEFER ★★★★★ ()
Ответ на: комментарий от unDEFER

Да всё верно. Я сначала написал сценарий к скрипту на Windows. Оттуда скачал его на Linux. И там переименовал его. Ещё раз спасибо огромное.

dottram ()
Ответ на: комментарий от firkax

Сколько твоих скриптов работает в продакшен, а не на локалхосте?

zolden ★★★★★ ()
Ответ на: комментарий от dottram

Используй текстовый редактор, в котором можно выбрать формат конца строки.

Могу ошибаться, но возможно даже в обычном notepad.exe (блокноте) появилась эта функция в Windows 10.

Ну либо используй что-нибудь более продвинутое, например: notepad++.

kostik87 ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.