blog_bidela-sistema_backup_bacula

Bacula – Cancelando Job.

Usaremos esse recurso quando tivemos uma fila de job em nosso sistema de backup, e por “N” motivos esses jobs ficam presos, deixando uma fila imensa em nosso sistema. Nesse artigo vamos explanar vários exemplos para tratarmos essa situação.

Normalmente quando instalamos um servidor de backup Bacula em uma máquina robusta onde seu cliente também, esta em uma máquina com consideráveis recursos com uma largura de banda que atenda todas as requisições de backup, raramente você terá problemas com a backup do Bacula. Porém, quando esse requisitos não são atingidos, constantemente você verá uma fila de clientes com backup atrasados na lista de jobs em execução. Na maioria dos fatos se dá, devido há um plano de backup mau executado, onde alguns parâmetros não são levados em consideração.

Mais e ai? O que fazer quando esse problema ocorre, quando temos uma fila com atraso consideráveis em nossos jobs?

Não podemos simplesmente reiniciar o cliente, nem muito menos reiniciar os serviços do bacula-dir, pois essa ação poderá acarretar inconsistência no job dos clientes que não estão com problemas, que só serão percebidos quando você ou um determinado departamento depender desses jobs.

Vamos mostrar como realizar o cancelamento do job pelo Bacula na escolha de um cliente e por ID do Jobs

Acessando console do Bacula

Estando logado com usuário com acesso administrativo, ou em caso de um usuário limitado você tenha os comando administrativo para executar, vamos realizar o seguinte procedimento.

Se tiver utilizando usuário sem privilégios adm. sempre execute o comando com sudo no final. Lembrando que quando executa-lo pela primeira vez em uma determinada sessão, será solicitado a senha do usuário root.

bconsole

Se o seu acesso no bconsole, que é a console do Bacula, tiver ocorrido com êxito. O simbolo # vai ser substituído pelo *.

O comando Help lista todos os comando.

*help

Não há a necessidade de digitar * porque o sistema já inseri ele por padrão, mediante a isso, durante o restante do artigo, não irei utiliza-lo, para os comandos do bconsole, há não ser que seja para usa-lo como curinga, que veremos mais pra frente.

Command Description
======= ===========
add Add media to a pool
autodisplay Autodisplay console messages
automount Automount after labe
cancel Cancel a job
create Create DB Pool from resource
delete Delete volume, pool or job
disable Disable a job, attributes batch process
enable Enable a job, attributes batch process
estimate Performs FileSet estimate, listing gives full listing
exit Terminate Bconsole session
gui Non-interactive gui mode
help Print help on specific command
label Label a tape
list List objects from catalog
llist Full or long list like list command
messages Display pending messages
memory Print current memory usage
mount Mount storage
prune Prune expired records from catalog
purge Purge records from catalog
quit Terminate Bconsole session
query Query catalog
restore Restore files
relabel Relabel a tape
release Release storage
reload Reload conf file
run Run a job
restart Restart a job
resume Resume a job
status Report status
stop Stop a job
setdebug Sets debug level
setbandwidth Sets bandwidth
snapshot Handle snapshots
setip Sets new client address -- if authorized
show Show resource records
sqlquery Use SQL to query catalog
time Print current time
trace Turn on/off trace to file
truncate Truncate one or more Volumes
unmount Unmount storage
umount Umount - for old-time Unix guys, see unmount
update Update volume, pool or stats
use Use catalog xxx
var Does variable expansion
version Print Director version
wait Wait until no jobs are running

When at a prompt, entering a period cancels the command.

You have messages.

*

O comando cancel listará todos os jobs em execução. Esse comando listará todos os jobs em execução, as linhas exibidas estão seguidas das seguintes colunas, ID da Fila Do job, ID do job e o Nome do log do job, usaremos esses campos para identificar e cancelar nosso(s) job(s) problemático(s).

Ainda logado no bconsole, iremos entrar com o comando cancel e será listado nos os Jobs em execução.

cancel
Select Job(s):

1: JobId=1223309 Job=_Cliente01.2021-01-31_09.45.00_25
2: JobId=1223333 Job=_Cliente01.2021-01-31_10.05.00_53
3: JobId=1223357 Job=_Cliente01.2021-01-31_10.25.00_21
4: JobId=1223390 Job=_Cliente02.2021-01-31_10.50.01_00
5: JobId=1223406 Job=_Cliente01.2021-01-31_11.05.00_19
6: JobId=1223430 Job=_Cliente01.2021-01-31_11.25.00_47
7: JobId=1223454 Job=_Cliente01.2021-01-31_11.45.00_15
8: JobId=1223478 Job=_Cliente01.2021-01-31_12.05.00_43
9: JobId=1223502 Job=_Cliente01.2021-01-31_12.25.00_11
10: JobId=1223526 Job=_Cliente01.2021-01-31_12.45.00_39
11: JobId=1223550 Job=_Cliente01.2021-01-31_13.05.00_08
12: JobId=1223574 Job=_Cliente01.2021-01-31_13.25.00_36
13: JobId=1223607 Job=_Cliente02.2021-01-31_13.50.00_15
14: JobId=1223623 Job=_Cliente01.2021-01-31_14.05.00_34
15: JobId=1223647 Job=_Cliente01.2021-01-31_14.25.01_02
16: JobId=1223671 Job=_Cliente01.2021-01-31_14.45.00_31
17: JobId=1223695 Job=_Cliente01.2021-01-31_15.05.01_01
18: JobId=1223719 Job=_Cliente01.2021-01-31_15.25.00_30
19: JobId=1223743 Job=_Cliente01.2021-01-31_15.45.00_58
20: JobId=1223767 Job=_Cliente01.2021-01-31_16.05.00_27
21: JobId=1223791 Job=_Cliente01.2021-01-31_16.25.00_55
22: JobId=1223824 Job=_Cliente02.2021-01-31_16.50.00_34
23: JobId=1223840 Job=_Cliente01.2021-01-31_17.05.00_53
24: JobId=1223864 Job=_Cliente01.2021-01-31_17.25.00_21
25: JobId=1223888 Job=_Cliente01.2021-01-31_17.45.00_49
26: JobId=1223912 Job=_Cliente01.2021-01-31_18.05.00_18
27: JobId=1223936 Job=_Cliente01.2021-01-31_18.25.00_46
28: JobId=1223960 Job=_Cliente03.2021-01-31_18.45.00_14
29: JobId=1223984 Job=_Cliente01.2021-01-31_19.05.00_43
30: JobId=1224008 Job=_Cliente01.2021-01-31_19.25.00_12
31: JobId=1224041 Job=_Cliente02.2021-01-31_19.50.00_52
59: JobId=1224500 Job=_Cliente02.2021-02-01_10.50.01_07
60: JobId=1224516 Job=_Cliente03.2021-02-01_11.05.00_46
61: JobId=1224518 Job=_Cliente03.2021-02-01_11.05.00_48

Uma lista de JOBs serão exibidas e no fim dessa listagem será exibida as seguintes opções:

1. ID da fila do Job;
2. ID do Job;
3. O nome de log do JOB.

Dando uma prevê explanação da opções listada para cancelamento de Jobs. Vamo usar essa linha de job (5: JobId=1223406 Job=_Cliente01.2021-01-31_11.05.00_19) para explanar nosso exemplo.

  1. ID da fila do Job – para usar esse recurso usaremos a numeração da primeira coluna dos Jobs; 5
  2. ID do Job – para cancelar um Job usando esse item, temos que usar a informação da segunda coluna; 1223406
  3. O nome de log do JOB – para usarmos o cancelamento usando esse item, teremos que entrar com as informações da última coluna. _Cliente01.2021-01-31_11.05.00_19

Como sugeri o título desse artigo, vamos cancelar os jobs de um cliente específico. Vamos supor que Cliente01 esteja com problemas em seus jobs.

 Primeiro Exemplo – Cancelando job por ID da Fila de Jobs

Para cancelar o primeiro JOB basta digitar o seguinte comando cancel. Abaixo segui a tela de informação da tela de informação do bconsole do Bacula completo:

*cancel


Select Job(s):

1: JobId=1223309 Job=_Cliente01.2021-01-31_09.45.00_25
2: JobId=1223333 Job=_Cliente01.2021-01-31_10.05.00_53
3: JobId=1223357 Job=_Cliente01.2021-01-31_10.25.00_21
4: JobId=1223390 Job=_Cliente02.2021-01-31_10.50.01_00
5: JobId=1223406 Job=_Cliente01.2021-01-31_11.05.00_19
6: JobId=1223430 Job=_Cliente01.2021-01-31_11.25.00_47
7: JobId=1223454 Job=_Cliente01.2021-01-31_11.45.00_15
8: JobId=1223478 Job=_Cliente01.2021-01-31_12.05.00_43
9: JobId=1223502 Job=_Cliente01.2021-01-31_12.25.00_11
10: JobId=1223526 Job=_Cliente01.2021-01-31_12.45.00_39
11: JobId=1223550 Job=_Cliente01.2021-01-31_13.05.00_08
12: JobId=1223574 Job=_Cliente01.2021-01-31_13.25.00_36
13: JobId=1223607 Job=_Cliente02.2021-01-31_13.50.00_15
14: JobId=1223623 Job=_Cliente01.2021-01-31_14.05.00_34
15: JobId=1223647 Job=_Cliente01.2021-01-31_14.25.01_02
16: JobId=1223671 Job=_Cliente01.2021-01-31_14.45.00_31
17: JobId=1223695 Job=_Cliente01.2021-01-31_15.05.01_01
18: JobId=1223719 Job=_Cliente01.2021-01-31_15.25.00_30
19: JobId=1223743 Job=_Cliente01.2021-01-31_15.45.00_58
20: JobId=1223767 Job=_Cliente01.2021-01-31_16.05.00_27
21: JobId=1223791 Job=_Cliente01.2021-01-31_16.25.00_55
22: JobId=1223824 Job=_Cliente02.2021-01-31_16.50.00_34
23: JobId=1223840 Job=_Cliente01.2021-01-31_17.05.00_53
24: JobId=1223864 Job=_Cliente01.2021-01-31_17.25.00_21
25: JobId=1223888 Job=_Cliente01.2021-01-31_17.45.00_49
26: JobId=1223912 Job=_Cliente01.2021-01-31_18.05.00_18
27: JobId=1223936 Job=_Cliente01.2021-01-31_18.25.00_46
28: JobId=1223960 Job=_Cliente03.2021-01-31_18.45.00_14
29: JobId=1223984 Job=_Cliente01.2021-01-31_19.05.00_43
30: JobId=1224008 Job=_Cliente01.2021-01-31_19.25.00_12
31: JobId=1224041 Job=_Cliente02.2021-01-31_19.50.00_52
59: JobId=1224500 Job=_Cliente02.2021-02-01_10.50.01_07
60: JobId=1224516 Job=_Cliente03.2021-02-01_11.05.00_46
61: JobId=1224518 Job=_Cliente03.2021-02-01_11.05.00_48

1. ID da fila do Job;
2. ID do Job;
3. O nome de log do JOB.

Como já dito, teríamos o comando cancel, depois seria exibida os jobs em execução de todos os clientes e no final da listagem as opção para o cancelamento de Jobs.

Se fossemos cancelar o ID 6 o comando ficaria assim:

*cancel
ENTER
1
ENTER
6
ENTER

Com os devidos exemplo vamos para a ação efetiva.

Eu quero Cancelar o primeiro JOB do Cliente02. Assim ficaria a sequência de comandos:

*cancel
ENTER
1
ENTER
4
ENTER

É só aguardar o aviso do comando executado.

 Segundo Exemplo – Cancelando job por intervalo do ID da Fila de Jobs

Vamos realizarmos um exemplo para para que isso de certo. Para determinarmos um intervalo usaremos o numero do ID inicial mais o símboloe um número do ID final da fila do job.

Ficando assim: 6-18, nesse exemplo estamos informando ao console do Bacula que queremos cancelar a fila de job 6 a 18, com esse comando todo o intervalo seria cancelado independente do cliente que o está executando.

Vamos cancelar um intervalo de job do Clinete01, podemos perceber que na listagem de jobs mais acima, temos uma sequência de jobs do Cliente01. essa esquinência é interrompida pelo Clinete02 na quarta fila de jobs. Então vamos realizar o cancelamento de intervalo de jobs do cliente01 preservando o job do Cliente02.

*cancel
ENTER
1
ENTER
1-3
ENTER
*cancel
ENTER
1
ENTER
5-12
ENTER

Como é facilmente observável, no primeiro bloco de comandos estamos cancelando job utilizando os dados da fila de jobs do primeiro ítem da fila ao terceiro ítem. No segundo bloco de comandos cancelamos a quinta fila do job á decima segunda fila. Com isso preservamos os Jobs do Cliente02.

Terceiro Exemplo – Cancelando job por ID do Log do Job

Ao realizar um cancelamento pelo ID de um job, estaremos garantindo que um Job específico esteja sendo cancelado, esse tipo de cancelamento é uma das forma amis seguras por tratar de ID único para a consulta de um job. Esse cancelamento ignora completamente qualquer outra informação, cancelando aquele que corresponde a numeração informada.

Vamos supor que quero cancelar o vigésimo oitavo job da nossa listagem, isso corresponderia ao JobId 1223960, com isso nosso comando ficaria assim:

*cancel
ENTER
2
ENTER
1223960
ENTER

Quarto Exemplo – Cancelando job por Nome do Log

Esse tipo de cancelamento é útil quando queremos cancelar um job pelo cliente, por data ou por determinado hora que os jobs foram executados.

Vamos ver alguns exemplos:

Cancelando jobs por nome do cliente

Por padrão o log do job vai trazer o nome do cliente, separado por um ponto o teremos a data que separado por underline teremos a hora que esse job iniciou. Mais abaixo vamos usar em nosso exemplo o ID 61 da fila do job destacando em negrito as informações que utilizaremos.

61: JobId=1224518 Job=_Cliente03.2021-02-01_11.05.00_48 

*cancel
ENTER
3
ENTER
Cliente03.2021-02-01_11.05.00_48
ENTER

No exemplo acima estaremos cancelando o job da fila de ID 61.

Agora vamos cancelar todos os jobs do Cliente03 que estão rodando em nossa listagem dos jobs em execução.

*cancel
ENTER
3
ENTER
Cliente03*
ENTER

No exemplo acima estaremos cancelando os jobs que pertencem ao Cleinte03. O asterisco diz que qualquer informação do Cliente03 posterior ou adiante fazem parte da solicitação, tudo vai depender de qual posição está o asterisco.

Cancelando jobs por data e hora do log do Job

No exemplo seguinte, iremos cancelar os jobs em execução por ano.

*cancel
ENTER
3
ENTER
*2021*
ENTER

Agora vamos canelar os jobs do mês especifico independente do cliente ou mês.

*cancel
ENTER
3
ENTER
*2021-02*
ENTER

Acima estamos canelando os jobs do ano de 2021 do mês de Fevereiro

Agora vamos canelar os jobs do mês especifico do cliente02

*cancel
ENTER
3
ENTER
_Cliente02.2021-01*
ENTER

Acima estamos canelando os jobs do ano de 2021 do mês de Janeiro do Cliente Cliente01

Essas regas vale paras demais informações que queriam que sirva de parâmetro para que a sua solicitação de cancelamento seja atendida.

Mediante as exemplos exposto, basta agora colocarmos nossa logica para funcionar e realizar as devidas regras.

Quando realizar o procedimento, lembre-se que o procedimento é sem retorno, uma vez o comando emitido, o job será cancelado, então antes de tecla o ENTER, revise a solicitação.

Tem outro comando no bconsole que retorna o job cancelado, mas esse é um tópico para um próximo artigo.

Se está gostando das postagens, se inscreva em nosso site para receber mais materiais de nosso blog, é grátis, você vai ser notificado quando novas postagens forem publicadas, recebendo assim mais conteúdos de qualidades e ainda vai dar aquela força pra nossa comunidade. E não esquece de compartilhar em suas redes sociais os botões estão no final desse página.

No final dessa página temos um campo onde você é bem vindo para deixar seus comentários. Pode ser uma opinião, elogios, críticas ou correções. Pode ficar a vontade para tirar suas dúvidas ou colaborar acrescentando algo que tenhamos deixado passar desapercebido.

Sua visita e feedback é muito importante para o nosso espaço.

Deixe uma resposta