Ignorar alterações de arquivo

2

Eu tenho um processo, que gera um arquivo com dados de configuração e, em seguida, chama um subprocesso com esses dados como parâmetro. Eu gostaria de substituir os dados de configuração, que são passados. O problema é que eu não tenho controle sobre esse processo.

Eu tentei tornar o arquivo imutável usando chattr +i para que minhas alterações não sejam alteradas no processo, mas o processo de criação do arquivo retorna um erro.

Existe outra opção que eu possa usar?

EDITAR:

Mais específico: processA exclui settings.ovp n e depois o cria novamente com o novo conteúdo. Em seguida, chama openvpn --settings settings.opvn . Eu quero substituir settings.ovpn, porque é gerado errado.

    
por aphex 16.02.2014 / 02:33

1 resposta

1

Deve ser possível substituir o binário do subprocesso por um script wrapper (pelo menos dentro de um espaço de nomes separado).

#! /bin/bash

: replace the file or change the config file argument

exec /real/binary "$config_file"

Se isso não for possível, o arquivo pode ser substituído por algo especial (se for permitido existir quando o processo principal for iniciado):

  1. Com um dispositivo de loop, o mapeador de dispositivos, o destino flakey e a opção drop_writes você pode criar um dispositivo de bloco que descarta gravações:

    link

    Se o processo criar um arquivo maior que o pretendido, talvez seja necessário tornar o dispositivo DM tão grande. Basta colocar linhas vazias, linhas de comentário ou algo parecido no final.

  2. Talvez funcione para tornar o arquivo um FIFO. Provavelmente o arquivo de configuração é escrito consecutivamente do início ao fim, ou seja, sem buscas dentro do arquivo, apenas anexando. Um script leria daquele FIFO (teria que ser iniciado primeiro:

    #! /bin/bash
    read -n 1 dummy
    # replace the file, i.e. by replacing a symlink which switches 
    # between the FIFO and the real file. The open file descriptor 
    # is not affected by that but the subprocess will open the file 
    # instead of the FIFO
    cat >/dev/null # throw the input away
    
por 16.02.2014 / 06:46