Eu tenho um script que canalizará sua saída para |tee scriptnameYYMMDD.txt
. Após cada ciclo do loop for no qual a saída é gerada, estarei revertendo o conteúdo do arquivo tac scriptnameYYYYMMDD.txt > /var/www/html/logs/scriptname.txt
para que a saída do log fique visível em uma janela do navegador com as linhas mais recentes na parte superior.
Vou ter vários scripts fazendo isso em paralelo. Estou tentando minimizar a atividade do disco, para que a saída de |tee scriptnameYYYYMMDD.txt
um disco RAM seja melhor. mktemp
cria um arquivo na /tmp
pasta, mas isso não parece estar fora do disco.
shell-script
files
filesystems
scripting
tmp
user208145
fonte
fonte
fstab
a fim de montar umtmpfs
sobre/tmp
e em seguida, reiniciar a máquina.tail
os arquivos (ou iniciá-lo via CGI mediante solicitação ou algo assim), em vez detac
fazer a coisa toda.TEMPPATH="/ramdisk"
LOGPATH="/var/www/html/log"
...echo <various calls to echo> | tee -a $TEMPPATH/moveKRT$(date '+%Y%m%d').txt
... no final do loop for,cp $TEMPPATH/moveKRT$(date '+%Y%m%d').txt $LOGPATH/moveKRT$(date '+%Y%m%d').txt
tac $TEMPPATH/moveKRT$(date '+%Y%m%d').txt > $LOGPATH/moveKRT.txt
estou ciente da possibilidade minúscula de que a alteração de 23: 59: 59.999 para 00:00: 00 pode afetar alguns arquivos, mas a chance é aceitável.Respostas:
Você pode montar uma
tmpfs
partição e escrever o arquivo lá:Esta partição agora está limitada a 500 MB. Se o seu arquivo temporário cresce maior do que 500 MB ocorrerá um erro:
no space left on device
. Porém, não importa quando você especificar uma quantidade maior de espaço do que a RAM do sistema.tmpfs
também usa espaço de troca, portanto, não é possível forçar uma falha no sistemaramfs
.Agora você pode gravar seu arquivo em
/mountpoint
:fonte
size=[num]%
também é bom - um tmpfs pode ser limitado a uma porcentagem da memória disponível. Geralmente é mais fácil assim se os comandos nem sempre são direcionados para a mesma máquina (real / virtual) . Também é útil que um tmpfs não descarte conteúdo com-o remount,size=newsize
.mount
evitar que usuários não-root usem-t
ou-o
? Ou seja, como é possível criar scripts que usemtmpfs
(ou RAM de qualquer outra maneira) para salvar operações no disco, se um sistema de arquivos adequado ainda não existir no sistema?Tente isso com o Ubuntu:
fonte
/run/shm/
? Posso aplicarchmod
alterações no arquivo temporário, se necessário? Notei que os bits do modo da pasta são idênticos à/tmp
pasta. obrigado./run/shm
(link simbólico para/dev/shm
)mktemp
também possuem uma permissão padrão de-rw-------
(600) e você pode alterá-la se necessáriosudo chmod
.A resposta a seguir foi descoberta ao investigar as respostas anteriores e as informações nesta pergunta aqui e não teriam sido encontradas sem elas. Cudos para eles.
No meu sistema linuxmint (e eu assumiria a maioria dos sistemas baseados em ubuntu e possivelmente também em debian), existe um usuário de propriedade tmpfs montado automaticamente no
/run/user/1000/
Use
df -T
para verificar.Abaixo,
/run/user/
há um diretório para cada usuário normal no sistemaEsses diretórios são nomeados após os respectivos IDs de usuário. Podemos obter o ID do usuário para
id -u
verman id
detalhes sobre este comando.Em seguida, podemos usar o
mktemp
comando com a--tmpdir
opção de criar arquivos e diretórios temporários neste sistema de arquivos temporários, criando assim arquivos temporários na RAM.Seguindo as orientações fornecidas aqui , primeiro criei um diretório temporário e depois criei meus arquivos temporários:
para criar um diretório temporário
/run/user/1000/bash.w42BYxbG/
, em seguida,para criar um arquivo temporário nele.
Isso facilita a limpeza desses arquivos, pois tudo o que preciso fazer é
rm -r $mydir
.Por padrão, todos esses arquivos são de propriedade e legíveis apenas pelo usuário que os criou.
fonte
/run/user/1000
está disponível em cada linux que usa systemd, portanto não está disponível apenas em sistemas baseados em debian, mas também na maioria das outras distribuições de linux. Caso contrário, / tmp deve ser usado. Você pode simplificar seus comandos usando a variável $ XDG_RUNTIME_DIR, que já mantém o diretório correto para cada usuário. Para obter mais informações, verifique, por exemplo, esta resposta: unix.stackexchange.com/questions/162900/… #Pelo que entendi, os objetivos são: (1) não armazenar o arquivo invertido para o disco, para ser servido para o navegador (nota: este poderia ser tmpfs, etc, como todas as outras respostas já detalhe); mas (2) evite gravar o primeiro arquivo tmp no disco, com a saída original; e, no entanto, (3) ainda exibe a saída original para stdout.
Nesse caso, o seguinte pode atender às suas necessidades, usando a substituição do processo bash (ou seja, basicamente um pipe nomeado):
Observe que isso está imprimindo continuamente a saída no stdout e, quando o comando termina (quando o loop termina), reverte essa saída e a grava no arquivo de saída. Ilustrado através do seguinte, que imprime uma linha por segundo e, após o término, o arquivo
/tmp/foo.txt
contém as linhas invertidas:fonte