У вас есть IP-адрес, сохраненный в i
, поэтому вы можете добавить его в свою электронную почту следующим образом:
#!/bin/bash
proxy_targets=( 'http://10.1.1.4:3128' 'http://10.1.1.5:3128' 'http://10.1.1.6:3128' )
failed_hosts=
for i in "${proxy_targets[@]}"
do
exit_code=$(http --check-status --ignore-stdin --timeout=2.5 "--proxy=$i" HEAD www.msftncsi.com/ncsi.txt &> /dev/null; echo $?)
if ((exit_code==0))
then
echo 'OK!'
else
ip=${i#http://} # Removes http:// from variable
ip=${ip%:[0-9]*} # Removes port from the end
case $exit_code in
2) echo 'Request timed out!' | \
mail -s "The following WSA has failed to pass traffic: ${ip}, with the following error: $exit_code" moe.abdel@childrens.harvard.edu
;;
3) echo 'Unexpected HTTP 3xx Redirection!' | \
mail -s "The following WSA has failed to pass traffic: ${ip}, with the following error: $exit_code" katkota@newwork.com
;;
4) echo 'HTTP 4xx Client Error!' | \
mail -s "The following WSA has failed to pass traffic: ${ip}, with the following error: $exit_code" katkota@newwork.com
;;
5) echo 'HTTP 5xx Server Error!' | \
mail -s "The following WSA has failed to pass traffic: ${ip}, with the following error: $exit_code" katkota@newwork.com
;;
6) echo 'Exceeded --max-redirects=<n> redirects!' | \
mail -s "The following WSA has failed to pass traffic: ${ip}, with the following error: $exit_code" katkota@newwork.com
;;
*) echo 'Other Error!' | \
mail -s "The following WSA has failed to pass traffic: ${ip}, with the following error: $exit_code" katkota@newwork.com
;;
esac
fi
done
proxy_targets
в массив --proxy=$i
и убрал из него лишнее http://
ip
на текущий адрес, удалив http :// и порт ip
и exit_code
в тему письма. При запуске чего-либо, что взаимодействует с сервером X -, службы systemd становятся немного сложнее. Есть два основных способа сделать это:
$DISPLAY
и не запускайте, пока не будет достигнуто значение graphical.target
. Чтобы запустить это как пользовательскую службу -, переместите myfirst.service
в ~/.config/systemd/system/
. Затем удалите User=
и установите WantedBy=
на default.target
. default.target
достигается, когда пользователь входит в систему. Когда-нибудь будет graphical-session.target
, который будет достигнут, когда пользователь войдет в среду рабочего стола, но пока он недоступен. Вместо этого мы запускаем default.target
, который достигается, когда пользователь входит в систему. Если вы используете диспетчер отображения, то, вероятно, до этого у вас был сеанс x -.
[Unit]
Description=Command Service
After=default.target
[Service]
ExecStart=/bin/xbindkeys
ExecStartPost=/bin/setxkbmap -layout gb
Type=simple
Restart=on-abort
[Install]
WantedBy=default.target
Обязательно используйте --user
при работе с данным устройством, например:
systemctl --user daemon-reload
systemctl --user start myfirst.service
systemctl --user enable myfirst.service
Чтобы сохранить это как системную службу, оставьте файл в /etc/systemd/system/
, и вам нужно будет установить среду, чтобы он мог подключаться к серверу X -. Наконец, обязательно сделайте это WantedBy=graphical.target
. Это гарантирует, что он не попытается подключиться к серверу X -до запуска сервера X -. Однако я не уверен, что это всегда будет успешно, потому что я не уверен, что.Xauthority действителен, пока вы не войдете в систему.
[Unit]
Description=Command Service
After=graphical.target
[Service]
ExecStart=/bin/xbindkeys
ExecStartPost=/bin/setxkbmap -layout gb
Type=simple
User=user1
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/user1/.Xauthority
Restart=on-abort
[Install]
WantedBy=graphical.target
Системный -общий сервис становится немного странным, если у вас несколько пользователей или несколько дисплеев. Рекомендуется выполнять определенные действия пользователя -. Если вы находитесь в среде рабочего стола,вы можете echo $DISPLAY
и echo $XAUTHORITY
, чтобы выяснить, что установить для этих переменных.
После того, как вы внесете эти изменения, вам нужно попросить systemd
прочитать их, прежде чем вы попробуете start
следующий. Беги:
systemctl daemon-reload
Если вы экспериментировали, сначала systemctl disable myfirst.service
убедитесь, что systemctl start myfirst.service
работает, тогда вы сможете systemctl enable myfirst.service
. enable
создаст символическую ссылку в default.target
или graphical.target
, чтобы при перезагрузке вызывалась ваша служба. Чтобы избежать путаницы с этими ссылками во время эксперимента, просто не включайте его, пока не будете готовы к тестированию перезагрузки.
Заметьте, у меня есть странное подозрение по поводу этой строки /bin/xbindkeys &
в вашем скрипте bash. Обычно xbindkeys
всегда работает? Если это так, вы можете изменить свой ExecStart=
на :
ExecStart=/bin/xbindkeys
ExecStartPost=/bin/setxkbmap -layout gb
Type=simple
Я уже внес эти изменения в предложенные выше единицы измерения.
Это гарантирует, что systemd отслеживает процесс напрямую, а не разветвляется. Поскольку для Type=
не установлено значение forking
, я подозреваю, что сценарий bash завершится, и systemd не будет отслеживать PID xbindkeys
, оставив его как потерянный PID и не имея возможности его остановить. Если вы оставите xbindkeys
как часть ExecStart
, то остановка службы завершит работу xbindkeys (, что, я думаю, не удастся сделать прямо сейчас ). В этом случае вы также захотите установить Type=simple
, потому что oneshot
больше не будет применяться.