Bshellz shell autorenew – IRC-perl-скрипт для обновления аккаунта в Bshellz

Как-то я писал про бесплатный linux shell от провайдера Bshellz в заметке Бесплатный Linux-shell с Tmux на борту. Там же был приведён способ автоматического продления аккаунта – путём отправки (по расписанию) служебного сообщения боту Beschbot с помощью имеющегося на самом хостинге IRC-клиента irssi. Время показало, что способ, как и следовало ожидать, не лишён недостатков. А именно – периодически сервер Bshellz перезагружается, после чего настройка расписания в irssi слетает. Также – несколько раз наблюдались проблемы с подключением клиента к сети Freenode IRC. В результате возникло решение зарезервировать автообновление аккаунта в Bshellz путём использования дополнительного внешнего скрипта, также запускающегося по расписанию (раз в день в произвольное время, на домашней машине).

Непосредственно сам скрипт доступен по ссылке: bshellz-autorenew.pl. Принцип действия примитивен – подключается к Freenode IRC, заходит на канал #bshellz и даёт боту Beschbot команду продлить “время жизни” указанного в настройках аккаунта (в моём случае – аккаунт dimio): PRIVMSG Beschbot :!keep dimio.

Некоторых пояснений могут потребовать разве что настройки скрипта (изменяются в нём же самом). На части из них и остановлюсь чуть подробней:

my $opt = {
server_name => 'irc.freenode.net',
server_port => '6667',
channel => 'bshellz',
bot_name => 'Beschbot',
nickname => 'dimio',
bshellz_name => 'dimio', # name of bshellz account
verbose => 0, # print irc server responses & debug data
print_log => 1, # print Beschbot "!keep" response for cron sending report email
};

  • channel – название канала, на который будет заходить скрипт;
  • bot_name – пользователю с указанным здесь именем будет отправлено сообщение от продлении аккаунта;
  • nickname – ник для IRC, любой, допускаемый правилами сети;
  • bshellz_name – название аккаунта в Bshellz, для которого требуется запросить продление времени жизни;
  • verbose – вывод отладочной информации, может принимать значения от 0 (не выводит никакой отладочной информации) до 2 (выводит полный лог запросов-ответов сервера);
  • print_log – 0 (не выводить) или 1 (выводить) ответ бота на запрос о продлении аккаунта, при запуске через планировщик заданий – ответ попадёт в отчёт планировщика, что удобно.

После запуска скрипта с приведёнными в примере выше настройками должно быть получено ответное сообщение от Beschbot:

dimio@ibm:~$ perl bshellz-autorenew.pl
bshellz-autorenew.pl: :Beschbot!beschbot@services.bshellz.net PRIVMSG dimio :dimio's shell has 168 more hours to live!

– скрипт отработал успешно, время жизни аккаунта dimio продлено на 168 часов.

Запуск скрипта по нерегулярному расписанию (cron, anacron)

Основной вопрос – запуск скрипта. Поскольку он резервный – запуск у меня происходит на домашней машине, а она, в свою очередь, работает не круглосуточно. Использование “чистого” cron в таких условиях – не очень удобно (в указанное в расписании время запуска компьютер может быть выключен). Мне пришли в голову два выхода: применить anacron (anachronistic cron) или сделать простенькую shell-обёртку для запуска скрипта при помощи обычного cron. Первый вариант удобен тем, что используется готовый инструмент (который, однако, может потребоваться сначала установить), а второй вариант – удобен отсутствием необходимости устанавливать дополнительные утилиты.

Вариант первый – запуск через anacron

Запуск скрипта можно прописать в /etc/anacrontab непосредственно (см. пример ниже) или положить его (ссылку на него) в /etc/cron.daily/ (в этом случае файл скрипта должен быть исполняемым).

# format: period delay job-identifier command
1 5 cron.daily run-parts --report /etc/cron.daily
7 10 cron.weekly run-parts --report /etc/cron.weekly
@monthly 15 cron.monthly run-parts --report /etc/cron.monthly

@daily 5 bshellz-autorenew perl /home/dimio/bshellz-autorenew.pl

Формат anacrontab следующий: периодичность запуска задачи, задержка перед запуском задачи после старта системы, имя задачи и выполняемая команда.
Проверяем срабатывание – задача была создана, время последнего выполнения – указано в /var/spool/anacron/bshellz-autorenew:

dimio@ibm:~$ ls -lh /var/spool/anacron/
...
-rw------- 1 root root 9 мар 15 11:35 bshellz-autorenew

dimio@ibm:~$ cat /var/spool/anacron/bshellz-autorenew
20170314

Вариант второй – cron плюс обёртка для запуска

Небольшой shell-скрипт cron_daily_bshellz.bash, который будет запускаться по расписанию обычного cron, но выполнять указанную задачу только раз в сутки. В crontab запуск у меня поставлен раз в 30 минут:

*/30 * * * * if [ "$(shuf -i '0-10' -n 1)" -gt 5 ]; then sh /home/dimio/bshellz-autorenew/cron_daily_bshellz.bash; fi

Под спойлером – лог запуска этого скрипта для проверки его работы, если кому интересно.

Спойлер

Первый запуск:

dimio@ibm:~$ sh -x cron_daily_bshellz.bash
+ LOG_FILE=/home/dimio/log/cron_daily_bshellz.bash.log
+ RUN_FILE=/home/dimio/bshellz-autorenew.pl
++ which perl
+ PERL_BIN=/usr/bin/perl
+ '[' '!' -r /home/dimio/log/cron_daily_bshellz.bash.log ']'
+ touch /home/dimio/log/cron_daily_bshellz.bash.log
++ date +%Y-%m-%d
+ CURR_DATE=2017-03-14
++ tail --quiet --lines=1 /home/dimio/log/cron_daily_bshellz.bash.log
++ cut '--delimiter= ' --fields=1
+ LAST_RUN_DATE=
+ '[' -n '' ']'
+ eval '/usr/bin/perl /home/dimio/bshellz-autorenew.pl'
++ /usr/bin/perl /home/dimio/bshellz-autorenew.pl
/home/dimio/bshellz-autorenew.pl: :Beschbot!beschbot@services.bshellz.net PRIVMSG dimio :dimio's shell has 168 more hours to live!
++ date +%H:%M
+ echo '2017-03-14 13:37'
+ exit 0

Повторный запуск в тот же день:

dimio@ibm:~$ sh -x cron_daily_bshellz.bash
+ LOG_FILE=/home/dimio/log/cron_daily_bshellz.bash.log
+ RUN_FILE=/home/dimio/bshellz-autorenew.pl
++ which perl
+ PERL_BIN=/usr/bin/perl
+ '[' '!' -r /home/dimio/log/cron_daily_bshellz.bash.log ']'
++ date +%Y-%m-%d
+ CURR_DATE=2017-03-14
++ tail --quiet --lines=1 /home/dimio/log/cron_daily_bshellz.bash.log
++ cut '--delimiter= ' --fields=1
+ LAST_RUN_DATE=2017-03-14
+ '[' -n 2017-03-14 ']'
+ '[' 2017-03-14 = 2017-03-14 ']'
+ exit 0

[свернуть]

Вот и всё, теперь аккаунт Bshellz защищён от удаления дополнительным инструментом, помимо использованного ранее автопродления регистрации Bshellz через irssi.

4 мысли о “Bshellz shell autorenew – IRC-perl-скрипт для обновления аккаунта в Bshellz”

  1. Йо! Мэн, я с бшелзом знаком хз с каких лохматых годов, тоже когда-то маялся с автопродливалками, потом плюнул и задонатил 20 евро за пожизненный аккаунт. Какое-то время контактировал с Вуком — он временно админил бшелловские сервера, а сейчас там какой-то кромешный мрак. Главная – в дауне, на письма никто не отвечает.
    Я всякую мелочь тестирую, но у меня доступа к логам апача нет – даже не знаю к кому обращаться. Вероятно прийдется на фриноде вылавливать кого-нибудь, но может быть у тебя есть контакты?
    Заранее благодарен!

    1. Нету. Сам пытался в ирке выяснить, почему периодические ошибки с логином на сервер, но глухо. А потом логиниться вовсе перестало, так что плюнул в итоге. Донатить за это – ну уж нет, лучше VPS за бакс в месяц взять.

        1. arubacloud например. Как шелл и точка для проброса VPN – нормально. В принципе, если мониторить скидки – можно и у более именитых хостеров похожую цену поймать.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *