Documente Academic
Documente Profesional
Documente Cultură
Servios do Systemd
Gesto de Servios
O objetivo fundamental de um sistema de inicializao inicializar os componentes que devem ser
iniciados aps o kernel Linux ser inicializado (tradicionalmente conhecido como componentes
userland). O sistema de inicializao tambm usado para gerenciar servios e daemons para o
servidor a qualquer momento enquanto o sistema est em execuo. Com isso em mente, vamos
comear com algumas operaes de gerenciamento de servios simples.
No systemd, o alvo da maioria das aes so units (unidades), que so recursos que Systemd sabe
gerir. As unidades so classificadas pelo tipo de recurso que representam e so definidas com
arquivos conhecidos como arquivos de unidade. O tipo de cada unidade pode ser inferida a partir do
sufixo no fim do ficheiro.
Para tarefas de gerenciamento de servios, a unidade de destino ser unidades de servios, que tm
arquivos de unidades com um sufixo de .service. No entanto, na a maioria dos comandos de
gerenciamento de servios, voc pode realmente deixar de fora o sufixo .service, pois o systemd
inteligente o suficiente para saber que voc provavelmente vai querer operar em um servio ao usar
comandos de gerenciamento de servios.
Observe sua rvore de servios com o pstree.
Iniciar e parar servios
Para iniciar um servio do systemd, executando instrues no arquivo de unidade do servio, use o
prefixo start no comando. Se voc estiver executando como um usurio no-root, voc ter que
usar o sudo uma vez que este ir afetar o estado do sistema operacional:
sudo systemctl start application.service
Como mencionado acima, systemd sabe que procurar os arquivos *.service para os comandos de
gerenciamento de servios, portanto, o comando poderia facilmente ser digitado como este:
sudo systemctl start application
Embora voc possa usar o formato acima para administrao geral, para maior clareza, vamos usar
o sufixo.service para o restante dos comandos para ser explcito sobre o alvo estamos operando.
Para parar um servio em execuo, voc pode usar o comando prefixo stop no comando:
sudo systemctl stop application.service
Reiniciando e Recarregando
Para reiniciar um servio em execuo, voc pode usar o comando restart:
sudo systemctl restart application.service
Se a aplicao em questo capaz de recarregar seus arquivos de configurao (sem reiniciar), voc
pode usar o comando reload comando para iniciar esse processo:
sudo systemctl reload application.service
Se voc no tem certeza se o servio tem a funcionalidade para recarregar sua configurao, voc
pode usar o comando reload-or-restart. Isto ir recarregar a configurao no local, se disponvel.
Caso contrrio, ele ir reiniciar o servio para que a nova configurao tome efeito:
sudo systemctl reload-or-restart application.service
Isto ir fornecer-lhe com o estado do servio, a hierarquia cgroup, e as primeiras linhas de log.
Por exemplo, ao verificar o status de um servidor Nginx, voc poder ver uma sada como esta:
nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor
preset: disabled)
Active: active (running) since Tue 2015-01-27 19:41:23 EST; 22h ago
Main PID: 495 (nginx)
CGroup: /system.slice/nginx.service
495 nginx: master process /usr/bin/nginx -g pid /run/nginx.pid;
error_log stderr;
496 nginx: worker process
Jan 27 19:41:23 desktop systemd[1]: Starting A high performance web server and a
reverse proxy server...
Jan 27 19:41:23 desktop systemd[1]: Started A high performance web server and a
reverse proxy server.
Isso lhe d uma boa viso geral do status atual da aplicao, notificando-o de todos os problemas e
quaisquer aes que possam ser necessrias.
Existem tambm mtodos para a verificao de estados especficos. Por exemplo, para verificar se a
unidade est ativa (em execuo), voc pode usar o comando is-active:
systemctl is-active application.service
Isto ir lhe retornar o estado da unidade atual, que geralmente active ou inactive. O cdigo de
sada ser 0 se ele estiver ativo, tornando o resultado mais simples para analisar
programaticamente.
Para ver se a unidade for ativada, voc pode usar o comando is-enabled:
systemctl is-enabled application.service
A sada ser se o servio est enabled ou disabled e voltar a definir o cdigo de sada para 0 ou
1, dependendo da resposta pergunta do comando.
Uma terceira verificao se a unidade est em um estado de falha. Esta indicar se existe um
problema ao iniciar a unidade em questo:
systemctl is-failed application.service
Isso ir retornar active se estiver funcionando corretamente ou failed se ocorreu um erro. Se a
unidade foi intencionalmente parada, ele pode retornar unknow ou inactive. Um status de sada 0
indica que ocorreu uma falha e um status de sada 1 indica qualquer outro status.
Isto ir mostrar uma lista de todas as unidades que Systemd tem atualmente ativas no sistema. A
sada ser algo parecido com isto:
UNIT LOAD ACTIVE SUB DESCRIPTION
atd.service loaded active running ATD daemon
avahi-daemon.service loaded active running Avahi mDNS/DNS-
SD Stack
dbus.service loaded active running D-Bus System
Message Bus
dcron.service loaded active running Periodic Command
Scheduler
dkms.service loaded active exited Dynamic Kernel
Modules System
getty@tty1.service loaded active running Getty on tty1
. . .
Uma vez que o comando list-units mostra apenas as unidades ativas, por padro, todas as entradas
acima iro mostrar loaded na LOAD e active na coluna ACTIVE. Esta exposio , na verdade,
o comportamento padro do systemctl quando chamado sem comandos adicionais, ento voc vai
ver a mesma coisa se voc chamar systemctl sem argumentos:
systemctl
Podemos dizer systemctl trs informaes de sadas diferentes, adicionando flags adicionais. Por
exemplo, para ver todas as unidades que Systemd carregou (ou tentou carregar), independentemente
de se eles esto ativos, voc pode usar a flag all, como neste exemplo:
systemctl list-units --all
Isto ir mostrar qualquer unidade que Systemd carregou ou tentou carregar, independentemente do
seu estado atual no sistema. Algumas unidades se tornam inativas aps a execuo, e algumas
unidades que Systemd tentou carregar e pode por no ter sido encontrada no disco.
Voc pode usar outras flags para filtrar esses resultados. Por exemplo, podemos usar o state
= para indicar os estados LOAD, ativos ou SUB que desejar ver. Voc ter que manter o
sinalizador all para que o systemctl permita que as unidades no ativas sejam exibidas:
systemctl list-units --all --state=inactive
Outro filtro comum o filtro type=. Podemos dizer ao systemctl para mostrar somente unidades
do tipo que estamos interessados em ver. Por exemplo, para ver apenas as unidades do servio
ativas, ns podemos usar:
systemctl list-units --type=service
. . .
Gesto de unidade
At agora, temos trabalhado com os servios e exibido informaes sobre os arquivos e unidades
que o Systemd conhece. No entanto, podemos encontrar informaes mais especficas sobre as
unidades que usam alguns comandos adicionais.
[Unit]
Description=ATD daemon
[Service]
Type=forking
ExecStart=/usr/bin/atd
[Install]
WantedBy=multi-user.target
Exibindo Dependncias
Para ver rvore de dependncias de uma unidade, voc pode usar o comando list-dependencies:
systemctl list-dependencies sshd.service
Isto ir exibir uma hierarquia mapeando as dependncias que devem ser tratadas com a fim de
iniciar a unidade em questo. Dependncias, neste contexto, incluem as unidades que so ou
necessrias ou requeridas pelas unidades acima dela.
sshd.service
system.slice
basic.target
microcode.service
rhel-autorelabel-mark.service
rhel-autorelabel.service
rhel-configure.service
rhel-dmesg.service
rhel-loadmodules.service
paths.target
slices.target
. . .
As dependncias recursivas so exibidas apenas por unidades .TARGET, que indicam estados do
sistema. Para listar recursivamente todas as dependncias, inclua a flag all.
Para mostrar dependncias reversas (unidades que dependem da unidade especificada), voc pode
adicionar o sinalizador reverse ao comando. Outras opes que so teis so os before e after,
que podem ser usadas para mostrar unidades que dependem da unidade especificada, comeando
antes e depois dela, respectivamente.
Id=sshd.service
Names=sshd.service
Requires=basic.target
Wants=system.slice
WantedBy=multi-user.target
Conflicts=shutdown.target
Before=shutdown.target multi-user.target
After=syslog.target network.target auditd.service systemd-journald.socket
basic.target system.slice
Description=OpenSSH server daemon
. . .
Se voc quiser exibir uma nica propriedade, voc pode usar a flag -p com o nome da propriedade.
Por exemplo, para ver os conflitos que a unidade sshd.service tem, voc pode digitar:
systemctl show sshd.service -p Conflicts
Conflicts=shutdown.target
Isso ir impedir que o servio Nginx seja iniciado, manual ou automaticamente, durante o tempo
que ele mascarado.
Se voc verificar as list-unit-files, voc vai ver o servio agora est listado como mascarado:
systemctl list-unit-files
. . .
kmod-static-nodes.service static
ldconfig.service static
mandb.service static
messagebus.service static
nginx.service masked
quotaon.service static
rc-local.service static
rdisc.service disabled
rescue.service static
. . .
Se voc tentar iniciar o servio, voc ver uma mensagem como esta:
sudo systemctl start nginx.service
Para desmascarar uma unidade, tornando-a disponvel para uso novamente, basta usar o comando
unmask:
sudo systemctl unmask nginx.service
Este ser um arquivo em branco que pode ser usado para substituir ou adicionar diretrizes para a
definio da unidade. Um diretrio ser criado dentro da etc/systemd/system/ que ir conter o nome
da unidade com o sufixo .d. Por exemplo, para o nginx.service , um diretrio chamado
nginx.service.d ser criado.
Dentro deste diretrio, um arquivo ser criado chamado override.conf. Quando a unidade for
carregada, o systemd vai, na memria, mesclar o arquico de substituio com o arquivo unidade
completo. Diretivas do arquivo de configurao override.conf ter precedncia sobre os encontrados
no arquivo unidade original.
Se voc deseja editar o arquivo unidade completamente, em vez de criar um arquivo de override,
voc pode usar a flag full:
sudo systemctl edit --full nginx.service
Isto ir carregar o arquivo de unidade atual para o editor, onde ele poder ser modificado. Ao sair do
editor, o arquivo alterado ser gravado em /etc/systemd/system, que ter precedncia sobre
definio de unidade do sistema (geralmente encontrado em /lib/systemd/system).
Para remover todas as adies que voc tenha feito, exclua o diretrio de configurao da
unidade .d ou o arquivo de servio modificado a partir de /etc/systemd/system. Por exemplo:
sudo rm -r /etc/systemd/system/nginx.service.d
Depois de excluir o arquivo ou pasta, voc deve recarregar o processo do systemd para que ele no
tente fazer referncia a esses arquivos e reverter usando cpias do sistema. Voc pode fazer isso
digitando:
sudo systemctl daemon-reload
multi-user.target
Se voc deseja definir um target padro diferente, voc pode usar o set-default. Por exemplo, se
voc instalou um ambiente grfico desktop e voc deseja que o sistema inicialize-o por padro, voc
pode mudar seu target padro:
sudo systemctl set-default graphical.target
Listando Targets Disponveis
Voc pode obter uma lista dos targets disponveis no seu sistema digitando:
systemctl list-units-files --type=target
Ao contrrio de nveis de execuo, alvos mltiplos podem estar ativos ao mesmo tempo. Um alvo
ativo indica que systemd tentou comear a todas as unidades ligadas ao alvo e no tentou derrub-
las novamente. Para ver todos os alvos ativos, digite:
systemctl list-units --type=target
Isolando Targets
possvel iniciar todas as unidades associadas com um alvo e parar todas as unidades que no so
parte da rvore de dependncia. O comando que ns precisamos de fazer isso chamado,
apropriadamente, isolate. Isto semelhante mudar o runlevel (nvel de execuo) em outros
sistemas de inicializao.
Por exemplo, se voc estiver operando em um ambiente grfico com graphical.target ativo, voc
pode desligar o sistema grfico e colocar o sistema em um estado de linha de comando multi-user,
isolando o multi-user.target. Como o graphical.target depende do multi-user.target, (mas no o
contrrio), todas as unidades grficas sero interrompidas.
Voc pode querer dar uma olhada nas dependncias do alvo que voc est isolando antes de realizar
este procedimento para garantir que voc no est parando servios vitais:
systemctl list-dependencies multi-user.target
Quando estiver satisfeito com as unidades que sero mantidas ativas, voc pode isolar o alvo
digitando:
sudo systemctl isolate multi-user.target
Isto ir fornecer a funcionalidade adicional de alertar todos os usurios logados sobre o evento.
Para parar o sistema, voc pode usar o comando halt:
sudo systemctl halt
Todos estes comandos alertam os usurios logados que o evento est ocorrendo, algo que
simplesmente executando ou isolando o target no iria fazer. Note que na maioria das mquinas que
usam systemd, os comandos mais curtos, so abreviaes dos comandos do systemd, para estas
operaes e funcionam corretamente tambm.
Por exemplo, para reiniciar o sistema, normalmente voc pode digitar:
sudo reboot
Concluso
At agora, voc deve estar familiarizado com alguns dos recursos bsicos dos comandos
do systemctl que lhe permitem interagir com e controlar o seu systemd. O utilitrio systemctl ser o
seu principal ponto de interao para gerenciamento de servios e status do sistema.
O systemctl opera principalmente com o processo principal systemd, mas existem outros
componentes do ecossistema do systemd que so controladas por outros utilitrios.
Outros recursos, como sesses de gerenciamento de log e de usurio so manipulados por daemons
separados e utilitrios de gerenciamento (journald/journalctl e logind/loginctl respectivamente).
Dedicar tempo para se familiarizar com esses outros instrumentos e daemons faro a gesto do
sistema uma tarefa mais fcil.
Para saber mais sobre o jounalctl por exemplo, veja este outro artigo abaixo.
Como Analisar os Logs Usando o Journalctl
Bom, ento sabemos que o Journalctl um utilitrio do systemd. E ele usado para consultar e
exibir mensagens do journal. Uma vez que o journal composto por um ou mais arquivos binrios,
journalctl a maneira padro para ler mensagens a partir dele.
Nos pargrafos seguintes, vamos ver como journalctl pode ser usado com alguns dos seus
parmetros. Cada parmetro pode ser usado sozinho ou combinado com outros parmetros para
estreitar ainda mais o mbito da pesquisa.
Quando executado sem parmetros, o comando a seguir ir mostrar todas as entradas do journal,
que pode ser bastante longa:
journalctl
As entradas comearo com uma flag semelhante a esta que mostra o perodo de tempo abrangido
pelo log:
-- Logs begin at Thu 2015-06-25 00:34:38 EDT, end at Sun 2015-06-28 20:30:55
EDT. --
O journalctl vai parar depois de exibir cada tela de mensagens, e voc pode pressionar PgDn ou
barra de espao para ver a prxima tela cheia. Para parar a qualquer momento, pressione q. Isso
funciona como o comando less padro em Linux. Entradas longas so mostradas conforme largura
da tela e truncado com off no final, se eles no se encaixam. A poro de corte pode ser vista usando
as teclas de seta esquerda e direita.
Para obter uma lista completa de opes de journalctl, voc pode visitar a pgina de manual
do journalctl.
Mensagens de inicializao
Para ver mensagens relacionadas com o arranque da boot atual, use a opo -b:
journalctl -b
Para ver mensagens da ltima inicializao, use o modificador -1; para ver as mensagens de
inicializao a partir de duas botas atrs, usar -2; e assim por diante. No exemplo abaixo, vamos ver
mensagens do ltimo boot e no do atual:
journalctl -b -1
Intervalos de Tempo
Para ver mensagens registradas dentro de uma janela de tempo especfico, podemos usar o since e
o until. O comando a seguir mostra mensagens do journal registrados na ltima hora:
journalctl --since "1 hour ago"
Para ver mensagens registradas nos ltimos dois dias, o seguinte comando pode ser usado:
journalctl --since "2 days ago"
O comando a seguir mostrar mensagens entre duas datas e horrios. Todas as mensagens
registradas desde (since) a data e hora definida e at (until) a data e hora definida:
journalctl --since "2015-06-26 23:15:00" --until "2015-06-26 23:20:00"
Note que a data e hora precisa ser especificada no formato: AAAA-MM-DD HH: MM: SS (Ano,
ms, dia, hora, minuto, e segundo).
Por Unidade
Para ver mensagens registradas por qualquer unidade systemd, use a opo -u. No exemplo abaixo,
o comando ir mostrar todas as mensagens registradas pelo servidor web usando o programa nginx.
Voc pode usar o since e until e at interruptores aqui para identificar erros no servidor web que
ocorreram dentro de uma janela de tempo:
journalctl -u nginx.service
A opo -u pode ser usado vrias vezes para especificar mais de uma fonte de unidade. Por
exemplo, se voc quiser ver entradas para o nginx e mysql, o seguinte comando pode ser usado:
journalctl -u nginx.service -u mysql.service
Follow ou Tail
Para executar journalctl como o comando tail Linux para que ele mostre continuamente mensagens
de log, use a opo -f:
journalctl -f
O parmetro -r mostra entradas de dirio em ordem cronolgica inversa para que as mensagens
mais recentes sejam exibidas. O comando abaixo mostra as ltimas 10 mensagens do daemon sshd,
listadas em ordem inversa:
journalctl -u sshd.service -r -n 1
Formatos de Sada
O parmetro -o nos permite formatar a sada de consulta journalctl. O -o (ou -output se estamos
usando o nome longo) pode nos trazer alguns valores:
json ir mostrar cada entrada de dirio no formato JSON em uma linha longa.
json-pretty ir mostrar cada entrada de log no formato JSON fcil de ler.
verbose mostrar informao muito detalhada para cada registro do journal com todos os campos
listados.
cat mostra as mensagens em forma muito curta, sem quaisquer nomes de servidor data/hora ou de
origem.
short o formato de sada padro: Mostra mensagens no estilo syslog.
short-monotonic semelhante ao short, mas o segundo valor contm o timestamp que mostrado
com preciso. Isso pode ser til quando voc est olhando para mensagens de erro gerados a partir
de mais de uma fonte que, aparentemente, est jogando mensagens de erro, ao mesmo tempo e voc
quer ir para o level. O comando de filtragem seguinte mostra ltima sada em formato JSON-
pretty:
journalctl -u sshd.service -r -n 10 -o json-pretty.
{
__CURSOR :
1
s=bf93c444c3a2499095953159a3cba8c2;i=40c14;b=fbde6d3112084cd097c250aee3bab030;
2
m=4f30cd3897;t=5199f269b9024;x=a424fc0dd9da81c4,
3
__REALTIME_TIMESTAMP : 1435546221776932,
4
__MONOTONIC_TIMESTAMP : 340121172119,
5
_BOOT_ID : fbde6d3112084cd097c250aee3bab030,
6
_TRANSPORT : syslog,
7
PRIORITY : 6,
8
SYSLOG_FACILITY : 10, SYSLOG_IDENTIFIER : sshd,
9
MESSAGE : pam_succeed_if(sshd:auth): requirement uid >= 1000 not met by user
10
root,
11
_UID : 0,
12
_GID : 0,
13
_COMM : sshd,
14
_EXE : /usr/sbin/sshd,
15
_CMDLINE : sshd: root [priv] ,
16
_CAP_EFFECTIVE : 1fffffffff, _SYSTEMD_CGROUP : /system.slice/sshd.service,
17
_SYSTEMD_UNIT : sshd.service,
18
_SYSTEMD_SLICE : system.slice,
19
_MACHINE_ID : fd8cf26e06e411e4a9d004010897bd01,
20
_HOSTNAME : test-centos7,
21
SYSLOG_PID : 32724,
22
_PID : 32724,
23
_SOURCE_REALTIME_TIMESTAMP : 1435546221776510
}
Por Prioridade
Use a opo -p para filtrar mensagens com base em um nvel de prioridade. Para ver quais nveis de
prioridade esto disponveis, consulte a seo sobre parmetros de configurao Systemd-journald
e os possveis valores de parmetros MaxLevelStore. Se um nico nvel de prioridade for
especificado, todas as mensagens com esse nvel de prioridade e abaixo dela sero exibidos. Para
usar uma gama de nveis de prioridade, use o FROMTO. Como um exemplo, o comando
abaixo mostrar todas as mensagens com prioridade entre emergncia e crtico do ltimo boot:
journalctl -b -1 -p "crit"
Por Usurio
Para localizar todas as mensagens relacionadas a um usurio especfico, use o UID do usurio. No
exemplo a seguir, ns estamos encontrando o UID do usurio mysql:
id mysql
E ento ns iremos consultar no journal todas as mensagens registradas por esse usurio:
journalctl _UID=108
Logs begin at Thu 20150625 00:34:38 EDT, end at Sun 20150628 23:16:08 EDT.
Jun 25 00:53:21 testubuntu15 mysqld_safe[11177]: 150625 00:53:21 mysqld_safe Cant log
to error log and syslog at the same time. Remove all log-error configuration options for
syslog to take effect.
Jun 25 00:53:21 test-ubuntu15 mysqld_safe[11177]: 150625 00:53:21 mysqld_safe Logging
1 to /var/log/mysql/error.log.
2 Jun 25 00:53:21 test-ubuntu15 mysqld_safe[11177]: 150625 00:53:21 mysqld_safe Starting
3 mysqld daemon with databases from /var/lib/mysql
4 Jun 27 21:41:26 test-ubuntu15 mysqld_safe[11177]: Could not open required defaults file:
5 /etc/mysql/debian.cnf
6 Jun 27 21:41:26 test-ubuntu15 mysqld_safe[11177]: Fatal error in defaults handling. Program
7 aborted
8 Jun 27 21:41:26 test-ubuntu15 mysqld_safe[11177]: 150627 21:41:26 mysqld_safe mysqld
9 from pid file /var/run/mysqld/mysqld.pid ended
10 <b> Reboot </b>
11 Jun 27 21:41:33 test-ubuntu15 mysqld_safe[561]: 150627 21:41:33 mysqld_safe Cant log to
12 error log and syslog at the same time. Remove all logerror configuration options for
syslog to take effect.
Jun 27 21:41:33 testubuntu15 mysqld_safe[561]: 150627 21:41:33 mysqld_safe Logging to
/var/log/mysql/error.log.
Jun 27 21:41:33 testubuntu15 mysqld_safe[561]: 150627 21:41:33 mysqld_safe Starting
mysqld daemon with databases from /var/lib/mysql
Bom pessoal, como falei no comeo do artigo, para maiores informaes consulte a pgina de
manual do jounalctl.
Ferramentas Visuais
Se voc estiver usando distros como o SUSE Enterprise ou o openSUSE por exemplo, poder
tambm checar os registros do journal usando o mdulo do Yast chamado journal-systemd, ou
Entradas do Dirio, conforme imagem abaixo.
Obs. O painel de controle Yast tambm funciona em modo texto no terminal. Ento poderia ser
usado mesmo se voc no possuir ambiente desktop instalado no SUSE/openSUSE.
Voc poder alterar o filtro que desejar usando o boto Mudar Filtro no canto inferior
esquerdo, e repare que quase todas as opes que citamos neste artigo, ou seja, o desde e at (since
e until), desde o ltimo boot, ou boot anterior, por unidade, por comando ou executveis, e por
prioridade (com uma combo-box para voc definir a prioridade), so exibidas na ferramenta.
Gnome-logs
Existe tambm uma ferramenta do Gnome, (que no vem instalada por padro, mas voc poder
instal-la usando o seu gerenciador de pacotes), chamada gnome-logs que mostra para voc
mensagens do seu journal e lhe permite pesquisar por elas. Mas esta no to completa, pois no
lhe permite realizar filtragens, apenas possui algumas categorias. Com certeza o mdulo do Yast
bem mais completo que esta, mas talvez possa ser til para voc.
Concluso
Bom, realmente o journalctl bem legal com seus diversos filtros e a possibilidade de podermos
combin-los. Usando-o no terminal existem muito mais opes de filtros que podemos combinar.
A maioria das Distribuies Linux esto usando ou migrando para o systemd, e por isso o journalctl,
ento creio que uma boa ideia nos acostumarmos a analisarmos os logs nesta ferramenta.
Porque o Journalctl Bacana e Porque o
Syslog Vai Sobreviver Por Mais Uma Dcada
Sobre o Journalctl no Systemd
O Systemd usa o Journalctl, que o utilitrio para analisar registros do Systemd. Ento muitas
pessoas comearam a se adaptar ao uso do Journalctl para analisar os logs.
Obs. Saiba mais sobre as diferenas entre o init e o Systemd.
Bem, h prs e contras sobre este tipo de registro. Para administradores de sistema, o journalctl
uma ferramenta poderosa que simplifica a busca de entradas no arquivo de log.
Por outro lado, eu procurei e ainda no encontrei nenhuma ferramenta de monitoramento (por
enquanto) que trabalhe com journalctl, portanto os logs ainda devem ser analisados usando
comandos de filtragem desejados e existe at uma ferramenta com interface grfica do Gnome que
mostra e filtra as mensagens do Journalctl chamada gnome-logs, mas nesse artigo mostrarei
apenas algumas formas de usar o journalctl via comandos no terminal.
Como voc viu, existem muitas opes de filtragem disponveis aqui. A maioria destas opes so
auto-explicativas.
Se voc quiser apenas para ver as entradas feitas por um comando em particular, digite journalctl
_COMM= e ento a tecla TAB, conforme abaixo.
#journalctl _COMM =
abrtd dnsmasq mtp-sonda tgtd sh
anacron rede gnome-keyring-d smartd udisksd
avahi-daemon hddtemp polkit-agente de ele smbd umount
festana journal2gelf polkitd sshd userhelper
blueman-mechani kdumpctl pulseaudio sssd_be yum
chronyd krb5_child qemu-system-x86 su
colord libvirtd sealert sudo
logger crond systemd sendmail
dbus-daemon mcelog setroubleshootd systemd-journal
Se voc digitar journalctl _COMM= sshd voc s vai ver as mensagens criadas por sshd.
# journalctl _COMM= sshd
-- Logs begin at Tue 2013-07-23 08:46:28 CEST, end at Wed 2013-07-24 11:10:01
CEST. --
Jul 23 09:48:45 fedora.example.com sshd[2172]: Server listening on 0.0.0.0 port
22.
Jul 23 09:48:45 fedora.example.com sshd[2172]: Server listening on :: port 22.
Surgiu h algum tempo a necessidade de eu agendar via Cron a execuo de um comando ou script
que apagasse em determinada pasta, arquivos mais antigos que 2 meses, ento fiz o script, agendei
no cron e s hoje resolvi compartilhar o mtodo que usei aqui no site.
Com isso automatizado, a cada 2 meses, ele rodar sozinho um comando que apagar arquivos mais
velhos que 2 meses na pasta especificada. Muito legal no ?!
Isso pode ser usado para criar uma simples rotina automtica de limpeza em seu Desktop, bem
como em servidores, nos arquivos que foram feitos backup.
Obs. Voc pode ter usado algum sistema ou comando para realizar backup, (como os que eu j
mostrei usando o sistema de Backup Bacula, ou programa Rsync ou usando compactao com tar e
gz).
Enfim, pode ser usado para limpar qualquer contedo de pasta. Neste caso aqui, selecionando
arquivos mais antigos que o nmero de dias que voc determinar. (Por isso perfeito para arquivos
de backup, pois provavelmente voc desejar manter os arquivos mais recentes enquanto ele ir
aparar os mais antigos automaticamente).
A sintaxe do comando a seguinte.
find /pasta/dos/seus/arquivos/* -mtime +60 -exec rm {} \;
Obs. O comando find pode ser usado para vrios fins. Aqui estamos usando para encontrar
arquivos mais antigos que tantos dias, mas voc pode us-lo, por exemplo, para encontrar
aquivos de determinado tipo, como arquivos de imagem tipo jpg e ento usar o -exec para copiar
ou deletar ou fazer o que voc quiser.
Em um exemplo de encontrar e apagar arquivos jpg, e ento apag-los, a sintaxe seria:
find /home/seu-user/Downloads/* -name ".JPG" -exec rm {} \;
Em um exemplo de encontrar esses arquivos jpg, mas apenas os mais antigos que uma semana, e
ento apag-los, basta usar os dois parmetros juntos:
find /home/seu-user/Downloads/* -name ".JPG" -mtime +7 -exec rm {} \;
Beleza?!
Ento vamos continuar com nosso exemplo e agendar isso para rodar automaticamente.
Agendando no Cron
Use o comando:
crontab -e
(Se for a primeira vez que est usando o cron, recomendo o uso do editor de texto nano (pois o
mais fcil), quando ele lhe perguntar qual deseja usar. Opo 2, conforme a imagem abaixo)
Adicione uma linha que agendar a execuo de seu script a cada 2 meses. No exemplo abaixo
defini que as 8:30 hs, no primeiro dia do ms, a cada 2 meses, em qualquer dia da semana que cair,
ele rodar o script.
30 08 01 */2 * /caminho/do/seu/script/apaga-arquivos-velhos.sh
Obs. Se desejar, ao invs de criar um script, e colocar no agendamento do cron abaixo o caminho
dele, voc poder substituir isso pelo comando diretamente. Ficaria assim:
30 08 01 */2 * find /home/seu-user/Downloads/* -mtime +60 -exec rm {} \;
Hoje, vou postar este tutorial sobre o RSync, cobrindo o uso bsico deste poderoso utilitrio.
O Rsync mais do que um comando ou um simples programa. Ele pode te oferecer funcionalidades
poderosas como a de sistemas de backup.
Imagine que voc tenha dois servidores de arquivos, um em seu local, e outro em outro local, (como
outro bairro, ou cidade, estado, pas e continente). E voc precisa fazer um backup de um para o
outro, ou que o contedo dos dois sejam sincronizados. O Rsync pode fazer isso para voc. E
mesmo para uma necessidade mais simples como fazer backup ou sincronizar arquivos em
diretrios de mquinas em sua rede local, ou mesmo na mesma mquina.
O que Rsync?
Rsync, que uma abreviao de Remote Sync, ou seja, sincronizao remota, uma ferramenta
de sincronizao de arquivos locais e remotos. Ele usa um algoritmo que minimiza a quantidade de
dados copiados movendo apenas as partes de arquivos que foram alterados. Isso o que chamamos
de cpia incremental, em um processo de backup. Claro que previamente preciso ter um backup
completo, para que nas prximas vezes, ele faa o incremental.
Rsync uma ferramenta muito flexvel de sincronizao habilitada para rede. Tambm pode se
referir ao protocolo de rede desenvolvido para utilizar esta ferramenta.
Quando chamo o rsync neste tutorial, estou me referindo principalmente ao servio, e no o
protocolo.
Devido sua presena em sistemas Unix-like, por vir includo por padro na maioria das
distribuies Linux, ele se tornou muito popular como uma ferramenta includo em scripts do
sistema Linux.
Sintaxe Bsica
A sintaxe bsica do rsync muito simples, e funciona de uma maneira que semelhante ao ssh, scp
e cp.
Ou seja, rsync parmetro pasta-origem pasta-destino.
Para conhecer todos os parmetros do rsync, veja atravs do comando man rsync.
Se quiser exportar a documentao oficial para um arquivo de texto, use o comando man rsync >
rsync.txt (pois a documentao tem 3 mil linhas).
Agora ns temos uma diretrio chamado dir1 com 100 arquivos nele e o dir2 vazio.
Por isso, sempre verifique seus argumentos antes de executar um comando rsync.
Compare esta sada com a sada que ns temos quando removemos a barra. Repare que agora ele
transferiu o diretrio todo e no apenas o contedo.
rsync -anv ~/dir1 ~/dir2
sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12...
sent 1,667 bytes received 320 bytes 3,974.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
2 Usando o Rsync Via SSH Para Enviar ou Receber Arquivos/Pastas de Uma Mquina
Remota
Essa parte muito importante para transferir dados de forma segura, pela sua lan ou pela internet
atravs de lugares distantes. Ser necessrio apenas que voc possua acesso SSH para a mquina
remota e rsync instalado em ambos os lados. Se for fazer um rsync remoto (o rsync usa acesso
remoto via ssh) de ou para um servidor pela rede:
Isso chamado de uma operao de push, porque ele empurra um diretrio do sistema local
para um sistema remoto.
Obs. No precisava, mas eu fiz uma ilustrao do que acontece, (usando duas mquinas com
interface grfica, para ficar melhor a visualizao), acessando via VNC (apenas para mostrar) uma
mquina remota em minha lan, e de minha mquina local, usei o rsync com ssh para copiar o
diretrio dir1 para a mquina remota.
Pull Puxando Arquivos/Diretrios
A operao oposta pull (puxar). O Pull funciona de modo contrrio, usado para sincronizar de
um diretrio remoto para o sistema local. No exemplo, o dir1 est no sistema remoto, em vez de
nosso sistema local, a sintaxe :
rsync -a username@mquina-remota:/home/username/dir1 diretrio-local-de-sua-
mquina
3 Compactando
Se voc estiver transferindo arquivos que no foram compactados anteriormente, como arquivos de
texto, voc pode reduzir a transferncia de rede, adicionando a compresso com a opo -z:
Obs. Essa compresso para a transferncia dos arquivos, e no gera um pacote do arquivo (tipo
zip, rar, tar).
rsync -az origem destino
4 Exibindo o Progresso
O parmetro -P muito til. Ele combina as aes progress e partial. A primeira delas
mostrar uma barra de progresso para as transferncias e o segundo permite retomar transferncias
interrompidas:
rsync -azvP ~/dir1 ~/dir2
Podemos atualizar a hora de modificao em alguns dos arquivos e ver que rsync inteligentemente
re-copia apenas os arquivos alterados:
touch dir1/file{1..10}
rsync -azvP ~/dir1 ~/dir2
Obs. Nesse caso, se a origem ainda tiver os arquivos l, e voc rodar esse comando, ele apenas
copiar os arquivos para o destino novamente, e no apagar nada (pois eles permanecem na
origem).
Agora, apague manualmente os arquivo da origem e rode o comando novamente e perceber que
ele os apagar no destino tambm.
E se por exemplo, voc apagar, apenas os 30 primeiros documentos na pasta de origem, e rodar
o comando, ele apagar apenas os mesmos 30 documentos na pasta destino.
Capiche?
Isso legal se voc configurar no Cron para rodar o comando rsync com delete, para sincronizar
os dois locais, automaticamente dentro de uma agenda que voc desejar, como por exemplo,
diariamente as 21:00hs. Mas falarei dos agendamentos no Cron um pouco mais abaixo.
Tambm possvel criar uma lista de excluses (com pastas e arquivos na lista)
Voc pode criar um arquivo de texto chamado exclude.txt. E vamos dizer que eu salvei este
arquivo em minha pasta home, e com o seguinte contedo:
file1.txt
/home/cleuber/dir1/file4.txt
/home/cleuber/dir1/teste/
Obs. Se voc nunca usou o Cron, ele ir pedir na primeira vez que voc escolha o editor de texto
que prefere usar para edit-lo. Eu gosto do nano, pois o considero mais prtico.
Agora, adicione a seguinte linha em seu cron:
01 02 * * * rsync -avz usurio@ip-do-servidor:/empresa/contabilidade
~/Documentos/backupes/contabilidade
Sintaxe do Cron
* * * * * comando a ser executado
- - - - -
| | | | +----- dia da semana (0 - 6) (domingo=0)
| | | +-------- ms (1 - 12)
| | +----------- dia do ms (1 - 31)
| +-------------- hora (0 - 23)
+----------------- minuto (0 - 59)
Caso 2 Em 2 Passos
Criando script de envio de arquivos sem compactao e depois agendando a execuo dele no
cron
Passo 1 Criar script de envio de arquivos RSync remoto, buscando todos os arquivos, sem
compactao.
Passo 2 Agendando execuo do script no Cron
Passo 1 Criar script de envio de arquivos
Voc poder criar um script de backup e no cron, ao invs do comando do rsync, bastar colocar o
caminho do seu arquivo de script.
Abra seu editor de texto favorito e crie um script como esse:
#!/bin/bash
rsync -avz usurio@ip-do-servidor:/empresa/contabilidade
~/Documentos/backupes/contabilidade
Agora, salve, feche e d permisso de execuo do seu script. (eu salvei na raiz e dei o nome de
backup-contabilidade).
sudo chmod +x /backup-contabilidade.sh
Passo 2 Agendando no Cron a execuo do script
E depois no Cron,
crontab -e
Mais limpo no ?!
Caso 3 Em 1 Passo
Agendando Atravs das Pastas do Cron, Usando script de RSync remoto, buscando todos os
arquivos, sem compactao.
Mas se quiser fazer algo mais simples, ou seja, que rode de hora em hora, 1 vez semanalmente,
mensalmente e assim por diante, existe um meio bem simples. E nesse caso, no use o crontab
-e.
Apenas copie e cole seu script de backup (previamente criado no caso2) em uma das pastas do
cron especficas que o rodaro conforme o nome de cada pasta.
Temos as seguintes pastas na estrutura de arquivos do Cron:
cd /etc/
cron.hourly => de hora em hora
cron.daily => diariamente
cron.weekly => semanalmente
cron.monthly => mensalmente
Basta colar seu script em uma delas de sua escolha e pronto.
sudo cp /etc/cron.a-pasta-de-agendamento-que-quiser
Caso 4 Em 4 Passos
Vamos fazer um script de backup com compactao e timestamp no nome do arquivo e agendar a
execuo dele no cron. E vamos fazer um script de transferncia para outro servidor do backup
compactado que foi realizado e agendar a execuo dele.
Passo 1 Criando Script de Compactao de seu backup com Tar.Gz, usando Time Stamp.
Passo 2 Agendando no Cron Usando o Script de Compactao e Salvando em diretrio local de
backup.
Passo 3 Criar Script de Envio usando o Rsync remoto para mquina cliente.
Passo 4 Agendando no Cron Usando o previamente criado script de RSync remoto dos arquivos
compactados.
4 Salve seu script e d permisso de execuo, (no meu caso salvei como compact-files-cont.sh)
sudo chmod +x /compact-files-cont.sh
Passo 2 Agendando no Cron para realizar o backup local compactado a 1:00 da manh.
E agendamos no Cron para rodar diariamente a 1:00 da manh:
crontab -e
01 01 * * * /compact-files-cont.sh
Agora, teremos, (depois da execuo do script pelo cron), um arquivo apenas, compactado e
colocado na pasta da raiz /backupes.
O arquivo ter o nome nesse formato: backup-data-do-backup.tar.gz
Agora, salve, feche e d permisso de execuo do seu script. (eu salvei na raiz e dei o nome de
backup-contabilidade).
sudo chmod +x /backup-contabilidade.sh
Passo 4 Agendando no Cron o Script de Rsync para buscar backup dos arquivos
compactados as 2:00 da manh.
E depois no Cron, agende para rodar as 2:00 da manh.
crontab -e
01 02 * * * /backup-contabilidade.sh
UFA!!!
Voc pode ento rodar esse comando diretamente ou criar um script com essa sintaxe e nos dois
casos, agendar no Cron se desejar (com comando direto ou apontando para um script), mas lembre-
se que para que rode sozinho de forma agendada no Cron preciso que no se exija senha de
autenticao via ssh entre um servidor outro, como expliquei no artigo que mostrei mais acima
sobre usar chaves de autenticao.
Concluso
Rsync pode simplificar as transferncias de arquivos atravs de conexes de rede e adicionar
robustez a sincronizao de diretrios.
A flexibilidade do rsync o torna uma boa opo para muitas operaes diferentes no nvel de
arquivos.
O domnio da ferramenta Rsync lhe permitir projetar operaes de backup complexos e obter o
controle refinado sobre o que transferido e como.
Autorizando Acesso SSH Com Chaves Sem
Solicitar Senha
Hoje, por causa de uma necessidade muito especfica, resolvi postar uma forma de credenciar nas
configuraes ssh de um servidor, para que um client o acesse, sem que senha seja solicitada, para
que, por exemplo, scripts de backup possam transferir dados via ssh, sem problemas.
Voc pode at pensar que isso pode ser inseguro, mas no , pois na verdade o acesso via SSH ser
realizado atravs da leitura de chave pblica e privada, estabelecendo uma confiana entre o
servidor e o cliente, permitindo o acesso somente quando validadas as chaves.
1 Gerando as chaves
Vamos usar o comando ssh-keygen no servidor de origem para fazer isso:
$ ssh-keygen -t rsa -C "Minha_Chave_SSH"
Enter passphrase:
Enter same passphrase again:
Ele ir pedir para confirmar o caminho, ento aperte Enter para o padro. E em seguida ele lhe
pedir a senha, no digite nada, aperte apenas a tecla Enter nas duas vezes.
Parmetros que usamos:
-t -> Especifica o tipo de chave, no nosso caso uma chave RSA
-C -> Comentrio da chave
A sada do comando dever se parecer com isso:
Sero gerados dois arquivos, id_rsa (Chave Privada) eid_rsa.pub (Chave Pblica).
Voc poder chec-los:
ls ~/.ssh
id_rsa id_rsa.pub known_hosts
Pronto copiada!
Obs. Se voc precisar configurar isso no HP-UX que usa o Unix, o arquivo de configurao
atravs do caminho /opt/ssh/etc/sshd_config.
Verifique se as seguintes no esto comentadas, ou seja, com um smbolo # no incio delas, e com
o yes, na primeira linha, conforme abaixo.
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
Como estou usando o nano, salvei com Ctrl+O e sa com o Ctrl+x
Obs. Opcional
Existem restries de segurana para que isso funcione, caso as permisses de arquivo requeridas
no campo StrictModes" estiver habilitado e com o yes.
No exemplo abaixo, por padro o StrictModes est comentado com # ento est desabilitado.
Home
Dicas e Tutoriais
Temas
Distro Reviews
Destaques
Notcias
Segurana
Games
Hardware
Sobre Mim
Home / Dicas e Tutoriais / Autorizando Acesso SSH Com Chaves Sem Solicitar Senha
1 Gerando as chaves
Vamos usar o comando ssh-keygen no servidor de origem para fazer isso:
$ ssh-keygen -t rsa -C "Minha_Chave_SSH"
Enter passphrase:
Enter same passphrase again:
Ele ir pedir para confirmar o caminho, ento aperte Enter para o padro. E em seguida ele lhe
pedir a senha, no digite nada, aperte apenas a tecla Enter nas duas vezes.
Parmetros que usamos:
-t -> Especifica o tipo de chave, no nosso caso uma chave RSA
-C -> Comentrio da chave
A sada do comando dever se parecer com isso:
Sero gerados dois arquivos, id_rsa (Chave Privada) eid_rsa.pub (Chave Pblica).
Voc poder chec-los:
ls ~/.ssh
id_rsa id_rsa.pub known_hosts
2 Copiando a chave pblica para o servidor
Agora vamos enviar a chave pblica para o servidor destino com o comando scp:
cd ~/.ssh/
Pronto copiada!
Obs. Se voc precisar configurar isso no HP-UX que usa o Unix, o arquivo de configurao
atravs do caminho /opt/ssh/etc/sshd_config.
Verifique se as seguintes no esto comentadas, ou seja, com um smbolo # no incio delas, e com
o yes, na primeira linha, conforme abaixo.
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
Como estou usando o nano, salvei com Ctrl+O e sa com o Ctrl+x
Obs. Opcional
Existem restries de segurana para que isso funcione, caso as permisses de arquivo requeridas
no campo StrictModes" estiver habilitado e com o yes.
No exemplo abaixo, por padro o StrictModes est comentado com # ento est desabilitado.
Caso isso esteja habilitado (sem o # e com o yes),voc precisar se certificar que a pasta .ssh
tenha a permisso 700, e o arquivo id_rsa esteja com 600, no servidor e no client.
Se precisar, ento, faa isso nos dois lados (no cliente e no servidor)
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_rsa
Obs. Se voc estiver usando o HP-UX, reinicie o servio do SSH com os seguintes comandos:
Parar
# /sbin/init.d/secsh stop
Iniciar
# /sbin/init.d/secsh start
Uma das coisas que fiz em meus laboratrios h algum tempo, mas havia me esquecido de publicar
aqui, foi criar um Controlador de Domnio Primrio em minha rede com Samba e colocar algumas
mquinas nesse domnio.
Este servio muito comum em empresas utilizando servidores Windows. O software do Windows
que realiza este servio o Active Directory, mas no Linux faremos isso com o Samba que alm de
servidor de arquivos pode ser Controlador de Domnio.
Desde a verso 4 do Samba ele passou a ter total compatibilidade com o AD do Windows, tornando
possvel realizar as mesmas tarefas de gerenciar um domnio que faria no Windows, pois at mesmo
as ferramentas administrativas que usar para gerenciar seu domnio sero as do Windows
realizadas remotamente de dentro de um Desktop Windows, mas vamos l mostrar na prtica.
mas antes:
Algumas definies via Wikipedia:
nano /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.0.seuip
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.7
dns-nameservers 192.168.0.seuip 8.8.8.8
(este segundo um servidor de DNS na nuvem, no caso este 8.8.8.8 o do Google, mas poderia ser o
208.67.222.222 ou 208.67.220.220, que o do OpenDNS)
dns-search cleuber.local (este ser o nome do domnio)
nano /etc/hosts
127.0.0.1 localhost
192.168.0.seuip ad.cleuber.local
4 Realize a instalao
Acesse a pasta onde descompactou
cd samba-4.1.10
Faa o build do cdigo fonte, prepare a instalao e instale com estes 3 comandos. Demora um
pouco at terminar.
./configure --enable-debug --enable-selftest
make
make install
5 Levantando o Domnio
hostname (para ver o nome da sua mquina)
O comando que iremos usar trar um wizard para que voc escolha opes de configurao do seu
AD. Depois do comando, preencha o que o wizard pedir, quando aparecer um item dentro de [ ]
quer dizer que o padro e voc poder teclar Enter para confirmar o padro, ou se preferir
digitar o padro.
/usr/local/samba/bin/samba-tool domain provision
7 Ative o servio
Ative com o comando abaixo
/usr/local/samba/sbin/samba
8 Verifique e teste tudo
8.1 Verifique os processos do Samba com o comando abaixo:
ps -aux | grep samba
Server Comment
--------- -------
Workgroup Master
--------- -------
Autenticao:
/usr/local/samba/bin/smbclient //localhost/netlogon -UAdministrator%suasenha
-c ls
Ok! AD no AR!
Agora Reinicie a mquina.