Архив автора: shilovk

Sidekiq service

https://cdyer.co.uk/blog/init-script-for-sidekiq-with-rbenv/

Sidekiq is a great queuing system for any rails app, it is easy to setup and fast since it also uses Redis. The most difficult part of integrating with a recent app for me, was getting it to start when the VPS booted.

The people behind sidekiq thankfully provide a nice init script, although my particular setup caused a few problems for it.

  • The script should run as root, however I use a ‘deployer’ user, under which runs rbenv. Root had no access to bundle exec
  • Since I don’t write init scripts often, it took me a while to get it to startafter Redis

My workaround to the rbenv problem was to modify the providied Sidekiq init script, to run the actual bundle exec sidekiq command as my deployment user:

START_CMD="$BUNDLE exec $SIDEKIQ -e $APP_ENV -P $PID_FILE"  
CMD="cd ${APP_DIR}; ${START_CMD}"

# Replaced this:
$START_CMD >> $LOG_FILE 2>&1 &

# With this:
su -c "$CMD" - $AS_USER  

I created the file /etc/init.d/sidekiq with the contents of the sidekiq init script, and my code above. This didn’t work. Examining the log file, sidekiq was being started before redis could finish initializing. To stop this happening I needed to run:

sudo update-rc.d sidekiq defaults 99  

This sets the index of the sidekiq script to be 99. For me Redis was initing at 20, since 99 is greater than 20, Sidekiq will start after.

You can now manage the sidekiq process with the usual:

service sidekiq start  
service sidekiq status  
service sidekiq stop  

Full modified init script below. I have only tried it on Ubuntu 12.10 although it should also work on other Ubuntus and probably Debian.

#!/bin/bash
# sidekiq Init script for Sidekiq
# chkconfig: 345 100 75
#
# Description: Starts and Stops Sidekiq message processor for Stratus application.
#
# User-specified exit parameters used in this script:
#
# Exit Code 5 — Incorrect User ID
# Exit Code 6 — Directory not found
# You will need to modify these
APP=«myapp«
AS_USER=«myuser«
APP_DIR=«/var/www/${APP}/current«
APP_CONFIG=«${APP_DIR}/config«
LOG_FILE=«$APP_DIR/log/sidekiq.log«
LOCK_FILE=«$APP_DIR/${APP}-lock«
PID_FILE=«$APP_DIR/${APP}.pid«
GEMFILE=«$APP_DIR/Gemfile«
SIDEKIQ=«sidekiq«
APP_ENV=«production«
BUNDLE=«bundle«
START_CMD=«$BUNDLE exec $SIDEKIQ -e $APP_ENV -P $PID_FILE«
CMD=«cd ${APP_DIR}; ${START_CMD} >> ${LOG_FILE} 2>&1 &«
RETVAL=0
start() {
status
if [ $? -eq 1 ]; then
[ `id -u` == '0' ] || (echo «$SIDEKIQ runs as root only ..«; exit 5)
[ -d $APP_DIR ] || (echo «$APP_DIR not found!.. Exiting«; exit 6)
cd $APP_DIR
echo «Starting $SIDEKIQ message processor .. «
su -c «$CMD«$AS_USER
RETVAL=$?
#Sleeping for 8 seconds for process to be precisely visible in process table — See status ()
sleep 8
[ $RETVAL -eq 0 ] && touch $LOCK_FILE
return $RETVAL
else
echo «$SIDEKIQ message processor is already running .. «
fi
}
stop() {
echo «Stopping $SIDEKIQ message processor ..«
SIG=«INT«
kill -$SIG `cat $PID_FILE`
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f $LOCK_FILE
return $RETVAL
}
status() {
ps -ef | grep sidekiq [0-9].[0-9].[0-9] | grep -v grep
return $?
}
case «$1« in
start)
start
;;
stop)
stop
;;
status)
status
if [ $? -eq 0 ]; then
echo «$SIDEKIQ message processor is running ..«
RETVAL=0
else
echo «$SIDEKIQ message processor is stopped ..«
RETVAL=1
fi
;;
*)
echo «Usage: $0 {start|stop|status}«
exit 0
;;
esac
exit $RETVAL

redis install

wget http://rpms.famillecollet.com/enterprise/6/remi/x86_64/remi-release-6.9-2.el6.remi.noarch.rpm
rpm -Uvh http://epel.mirror.net.in/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh remi-release-6.9-2.el6.remi.noarch.rpm
yum --enablerepo=remi install redis
chkconfig redis on
/sbin/service redis start
telnet 127.0.0.1 6379
set attitude:today "happy"
get attitude:today

linux команды

pwd - текущая диретория

mkdir -p test/test2 — обе директории создаст (рекурсивно)

tree test - дерево директорий

tail -10000 /sites/project/log/production.log | grep «Completed 200 OK in \d{6}» -P -B 20 —color

uefi

http://www.howtogeek.com/175641/how-to-boot-and-install-linux-on-a-uefi-pc-with-secure-boot/

http://www.howtogeek.com/126016/three-ways-to-access-the-windows-8-boot-options-menu/

Type the following command at the prompt and press Enter.

shutdown.exe /r /o

dual boot

Содержание.

Читать далее

mogrify resize compress and examples of find

many examples

Delete files by dir:

find path ./*/big_kartochka -print
find . -path ./*/big_kartochka -exec rm -rfv {} +

Find by:

find . -maxdepth 4 -iname "*original.jpg" ! -iname "*original.jpeg" ! -iname "*original.png"  -print -exec mogrify -resize 1280 {} \;
find \( -name '*.JPG' -o -name '*.jpg' -o -name '*.jpeg' -o -name '*.JPEG' \) -print -exec mogrify -compress JPEG -quality 80 {} \;
find ./*/original \( -name '*.JPG' -o -name '*.jpg' -o -name '*.jpeg' -o -name '*.JPEG' -o -name '*.png' -o -name '*.PNG' \) -print -exec mogrify -resize 1280 {} \;

Use the prune switch, for example if you want to exclude the misc directory just add a -path ./misc -prune -o to your find command:

find .-path ./misc -prune -o -name '*.txt'-print

Here is an example with multiple directories:

find .-type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o -print

Here we exclude dir1, dir2 and dir3, since in find expressions it is an action, that acts on the criteria -path dir1 -o -path dir2 -o -path dir3 (if dir1 or dir2 or dir3), ANDed with type -d. Further action is -o print, just print.

find ./*/a -name '*.jpg' -print
find -name "*.jpg" -print -exec mogrify -compress JPEG -quality 80 {} \;
find -name "*.jpg" -print -exec mogrify -compress JPEG {} \;
find -name "*.jpg" -print -exec mogrify -resize 320 -quality 75 {} \;
cd /Users/fred/tmp1
mogrify -path /Users/fred/cyclops2/ -format "_Resized.jpg" -resize 50% *.png
cd /Users/fred/tmp2
filelist=$(ls)
for file in $filelist; do
mv "$file" "$(echo "$file" | sed 's/._/_/g' )"
done
mogrify -resize 35%
cd fullsize
mogrify -resize 400x238 *.png
cd thumbs
mogrify -resize 288x171 *.png
cd $DIR
&& (
mogrify -resize 1024x768 *.JPG;
mogrify -auto-orient *.JPG
)
mogrify -density 200 -units PixelsPerInch *.png

CentOS управление загрузкой сервисов chkconfig

link

Для добавления сервисов в автозагрузку, в центосе используется утилита chkconfig

# chkconfig
chkconfig version 1.3.30.2 - Copyright (C) 1997-2000 Red Hat, Inc.
Может свободно распостраняться в рамках GNU Public License.
применение:   chkconfig --list [имя сервиса]
         chkconfig --add <имя сервиса>
         chkconfig --del <имя сервиса>
         chkconfig [--level <уровни>] <имя сервиса> <on|off|reset|resetpriorities>

Рассмотрим на примере ранее установленного snmpd
Проверим состояние сервиса:

# chkconfig --list snmpd
snmpd           0:выкл  1:выкл  2:выкл  3:выкл  4:выкл  5:выкл  6:выкл

т.е. на данный момент он выключен, и при старте системы не будет загружаться, исправим это недоразумение, но для начала разберемся что значат цифры 0-6 в выводе команды, а значат они только уровень выполнения сервиса:
Уровень 0 — остановка системы (halt) — работа системы должна быть прекращена;
Уровень 1 — однопользовательский режим работы — система инициализирует минимум служб и даёт единственному пользователю (как правило, суперпользователю) без проведения аутентификации командную строку. Как правило, этот режим используется для восстановления системы;
Уровень 2 — многопользовательский режим — пользователи могут работать на разных терминалах, вход в систему с процессом аутентификации;
Уровень 3 — многопользовательский сетевой режим — в отличие от предыдущего уровня, осуществляется настройка сети и запускаются различные сетевые службы;
Уровень 4 — не имеет стандартного толкования и практически не используется;
Уровень 5 — запуск графической подсистемы — по сравнению с уровнем 3 производится также старт графической подсистемы X11, и вход в систему осуществляется уже в графическом режиме;
Уровень 6 — перезагрузка системы — при включении этого режима останавливаются все запущенные программы и производится перезагрузка.
Теперь, когда мы мегамодные пацаны, и знаем про уровни выполнения, попробуем добавить наш snmpd в автозагрузку системы:

# chkconfig  --level 35 snmpd on

т.е. включили с уровнями 3 и 5
Проверим:

# chkconfig --list snmpd
snmpd           0:выкл  1:выкл  2:выкл  3:вкл   4:выкл  5:вкл   6:выкл

действительно 3 и 5 уровень включен)))
Теперь добавим его в автозагрузку:

# chkconfig --add snmpd

Чтобы удалить из автозагрузки:

# chkconfig  --del  snmpd

Выключить на всех уровнях:

# chkconfig  snmpd off

Включить на всех уровнях:

# chkconfig  snmpd on

Сброс сетевых настроек протокола TCP/IP и сброс DNS

http://forum.oszone.net/nextoldesttothread-308524.html

http://forum.oszone.net/post-1712993.html

sfc /scannow

HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer
HKLM\SYSTEM\ControlSet001\Services\LanmanServer
HKLM\SYSTEM\ControlSet002\Services\LanmanServer

link

Иногда, бывает, сбиваются настройки интернет подключения или просто не хочет подключатся к сети (не получает IP адрес по DHCP). Похожие неполадки могут возникнуть в следствии работы некоторых вредоносных программ (вирусов). Можно долго мучить тех. поддержку своего провайдера или вызывать специалиста на дом. Можно попробовать самостоятельно устранить неполадку.
Для сброса TCP/IP в операционных системах Windows NT (2000/XP/Seven) существует специальная программа netsh.exe.

netsh.exe — (Network Shell — Сетевая Оболочка) позволяет осуществлять конфигурирование сетевых параметров.

Некоторые пакостные вирусы залазят в WinSock и пакостят.
Симптомы:

  • Скорость закачки файлов по TCP очень низкая (при этом по UDP может качать быстро);
  • При включении компьютера некоторое время, пару минут, интернет работает нормально, но потом пропадает совсем (скорость падает до 0);
  • Интернет работает и скорость закачки нормальная, но закачанный файл получается битым так как закачивается не полностью (скорее всего вирус перехватывает часть пакетов при передаче, но передает уведомление источнику об успешном получении всех пакетов).

Кроме вирусов «поламать» Ваше подключение к интернету можете и Вы сами (или «само заглючило»)

Некоторые примеры:

  • Компьютер не получает ip-адрес автоматически (по DHCP);
  • Пингуются IP адреса но не пингуются по именам;
  • Компьютер получает IP адрес такого образца 169.254.*.* ;

Если от вирусов почистились то можно приступить в восстановлению. ВНИМАНИЕ! Следующие процедуры сбросят настройки сети. Настоятельно рекомендую переписать настройки.
Что бы сбросить Winsock:

  1. Откроем командную строку.
    Windows XP: Пуск — Выполнить (или на клавиатуре win+R) — ввести cmd и нажать [Enter].
    Windows 7: Пуск — в строке поиска ввести cmd на cmd.exe нажать правой кнопкой и выбрать «Запуск от имени администратора»
  2. Пишем netsh winsock reset
  3. Перезагружаем компьютер.

Если первая команда не помогла решить проблему, можно сбросить стек TCP/IP к «заводским» настройкам:
Там же в командной строке, впишите команду:

netsh int ip reset c:\resetlog.txt

При этом журнал сброса сохранится в корне диска C:\ если опустить приставку c:\ то журнал будет сохранен в текущем каталоге. После этого следует перезагрузить компьютер.

После использования этой команды в реестре сбросятся к «заводским» следующие ветки регистра:

SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\
SYSTEM\CurrentControlSet\Services\DHCP\Parameters\

Можно использовать эти команды вместе одна после другой. Они кстати сбрасывают и DNS-кэш.
О проблемах DNS-кэша: Например сайт переехал на другой хостинг, в следствии у него изменился IP адрес. А так как у Вас в кэше остались не совсем свежие данные при вводе имени сайта Вы попадете на старый IP адрес, где сайта уже нет.

Что бы не сбрасывать все настройки попробуйте команду ipconfig /flushdns Если не помогло используйте netsh int ip reset resetlog.txt — это гарантированно поможет и сбросит все, что касается сетевых подключений. ;-)

create database

link

I always forget the MySQL create database with UTF8 character set syntax, so here it is:

CREATE DATABASE `mydb` CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANTALLON`mydb`.*TO`username`@localhost IDENTIFIED BY 'password';

Alternatively, you can use ‘CREATE SCHEMA’ instead of ‘CREATE DATABASE’:

CREATESCHEMA`mydb` CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANTALLON`mydb`.*TO`username`@localhost IDENTIFIED BY 'password';