Onde coloco scripts executados por unidades systemd?

0

Para qualquer sistema operacional que use o systemd para gerenciar processos e siga o Padrão de hierarquia do sistema de arquivos pela Linux Foundation

Recentemente, perguntei onde, mas um arquivo de unidade do systemd: Onde coloco meu arquivo de unidade do systemd no Arch Linux?

Eu gostaria de executar um script python a cada 5 minutos (não confundir com um script de arquivo de unidade do systemd que chama o script python). Eu li as respostas para esta pergunta: Execute o script a cada 30 minutos com systemd

Aqui é onde minha pergunta entra. Onde você deve ou pode armazenar scripts que são executados pelo systemd? Existe um lugar reservado para isso, particularmente no Arch Linux?

  • Por exemplo, os logs são colocados em /var/log
  • systemd arquivos da unidade são colocados em /etc/systemd/system

/etc/systemd/system/writehello.service

Aqui está um exemplo de serviço.

[Unit]
Description=Run python script that writes hello in file on /media/5TB/hello.txt

[Service]
Type=oneshot
ExecStart=# <-- This is what I am looking for

[Install]
WantedBy=multi-user.target

/etc/systemd/system/writehello.timer

Aqui está um temporizador correspondente. Tudo isso é documentado.

[Unit]
Description=test

[Timer]
Persistent=true
OnUnitActiveSec=10s
OnBootSec=10s

[Install]
WantedBy=timers.target

/path/to/writehello.py

Este é o caminho que estou procurando.

#!/usr/bin/env python

import os
import datetime

now = datetime.datetime.now()

f1 = open('/media/mydrive/hello.txt','a')
f1.write('hello %s\n' % (now))
f1.close
    
por Jonathan Komar 31.08.2015 / 09:48

4 respostas

4

Eu também estava pensando sobre essa mesma questão e queria ver a opinião de outra pessoa. Minha opinião sobre isso é /usr/local/sbin como sbin é onde você coloca as coisas que devem ser executadas pelo administrador.

Sua análise está correta, o /usr/local é o local dedicado para a instalação de itens não gerenciados pelo gerenciador de pacotes. Mas bin é para coisas que devem ser executadas por usuários comuns. Em ambos os casos, você não deve permitir acesso de gravação a ninguém, exceto root aos arquivos em /usr/local . Essa é a convenção tanto quanto eu me lembro (por todo o / usr / /).

/opt é normalmente usado para pacotes que não são usados por padrão no sistema e o usuário deve definir algumas variáveis de ambiente para serem acessadas pelo bin / man / etc. diretórios de um pacote específico. Leia os links que eu forneci acima.

Veja Visão geral do RHEL FSH bem como a documentação mais recente da FHS .

    
por 27.11.2015 / 09:44
0

Você costuma fazer isso com o cron . Se você tem medo de que algum usuário com privilégios mais baixos edite o script python de maneira maliciosa, apenas conceda-lhe apenas direitos de leitura, proibindo a gravação neste arquivo.

    
por 31.08.2015 / 10:06
0

Você pode armazenar seus scripts em /usr/bin ou /usr/local/bin (preferencial) ou /opt

Você deve consultar o script na seção ExecStart= da seção de serviço do arquivo de unidade

    
por 01.09.2015 / 18:26
0

Aqui estão os locais ideais para armazenar as coisas que serão executadas (veja os links para detalhes):

Citação da hierarquia do sistema de arquivos padrão HS v2.3

Locally installed system administration programs should be placed in /usr/local/sbin.

Eu entendi que quando a documentação do FHS se refere a "sistema", está se referindo a algum usuário "root".

  1. /usr/local/bin OR /usr/local/sbin exclusivo para este computador (não disponível para um gerenciador de pacotes, por exemplo, scripts, software de um CD), ou seja, não instalado de uma fonte comum para todos os computadores ( não é um gerenciador de pacotes ). /usr/local/bin stuff pode ser executado por todos os usuários. /usr/local/sbin stuff pode ser executado apenas pela raiz (é o diretório "binário" do sistema).

  2. /usr/bin não exclusivo (compartilhado coisas entre computadores, por exemplo, de um gerenciador de pacotes, por exemplo, um gerenciador de pacotes usa esse local )

  3. /root/bin um usuário root poderia crie este diretório em vez de usar /usr/local/sbin . É um bom lugar para armazenar coisas que somente um usuário root executa OU pode ver (esta pasta é apenas executável por root ou raiz do grupo, portanto seu conteúdo não é visível para ninguém exceto root). crie uma pasta bin para manter as coisas consistentes, mas ninguém saberia de qualquer maneira :)

  4. /home/<user>/bin um usuário padrão poderia crie este diretório. É um bom lugar para armazenar scripts que são executados como um usuário padrão pelo systemd.

A conclusão é que número 1 seria um local ideal para armazenar scripts que são executados por um daemon / serviço do systemd.

Faz sentido,

  1. é uma localização padrão
  2. é isolado de seus pacotes do gerenciador de pacotes
por 01.09.2015 / 20:25