Execute o skript no desligamento e reinicialize

1

Com base em algumas postagens aqui, tento executar um script simples para limpar uma pasta com conteúdo temporário na reinicialização e no desligamento.

Seguindo as instruções e os READMEs, escrevi este script:

/etc/init.d/cleantmp

#!/bin/sh
### BEGIN INIT INFO
# Provides:          cleantmp
# Required-Start:
# Required-Stop:     $local_fs
# Default-Start:
# Default-Stop:      0 1 6
# Short-Description: clean temporary folders
# Description:
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin

echo "Clean up temporary folders"
rm -rf /home/user/tmp/*

Então eu dei a ele os direitos de execução:

$ sudo chmod +x /etc/init.d/cleantmp
$ ls -l /etc/init.d/cleantmp 
-rwxr-xr-x 1 root root 329 Dec 19 12:50 /etc/init.d/cleantmp

Então eu atualizo o rc:

$ sudo update-rc.d cleantmp defaults
$ ls -l /etc/rc?.d/*cleantmp 
lrwxrwxrwx 1 root root 18 Dec 19 13:12 /etc/rc0.d/K01cleantmp -> ../init.d/cleantmp
lrwxrwxrwx 1 root root 18 Dec 19 13:12 /etc/rc1.d/K01cleantmp -> ../init.d/cleantmp
lrwxrwxrwx 1 root root 18 Dec 19 13:12 /etc/rc6.d/K01cleantmp -> ../init.d/cleantmp

Até aí tudo bem. Mas após o desligamento e início ou reinicialização, os arquivos temporários ainda existem. Se eu chamar diretamente um dos links simbólicos usando sudo , os arquivos desaparecerão corretamente.

O que está errado aqui?

OS: Linux 4.4.0-104-genérico # 127-Ubuntu | Ubuntu Gnome 16.04.3 LTS de 64 bits

    
por Alex44 19.12.2017 / 13:20

1 resposta

3

Existem três coisas significativas erradas:

  • Você escreveu um script van Smoorenburg rc , quando o Ubuntu 16 é um sistema operacional systemd e está de fato em seu sistema init second desde o uso de van Smoorenburg rc há uma década. Não comece com van Smoorenburg rc se você estiver fazendo coisas novas no Ubuntu Linux.
  • Você escreveu um van Smoorenburg rc script mal , não seguindo as instruções ou o exemplo na página de manual init-d-script (5). Seu script rc não responde adequadamente aos vários subcomandos com os quais tais scripts são chamados, para iniciantes, ou fonte da biblioteca de funções padrão Debian / Ubuntu.
  • Você errou os cabeçalhos do LSB.

Com base no princípio de não começar com coisas com mais de uma década desatualizadas no Ubuntu Linux, jogue isso fora.

  • Escreva um arquivo clean-user-tmp.conf em /etc/tmpfiles.d ou
  • escreva para você mesmo um /etc/systemd/system/clean-user-tmp.service como

    [Unit]
    Documentation=https://unix.stackexchange.com/a/411804/5132
    Description=Remove ~user/tmp/
    [Service]
    User=user
    ; Common mistakes to avoid: 
    ;   expecting * or ~ to be expanded
    ;   not using an absolute pathname for the command
    ; Substitute /bin/rm if you do not have safe-rm installed.
    ExecStart=/usr/bin/rm -r -f -- ${HOME}/tmp/
    [Install]
    WantedBy=multi-user.target
    e habilite-o com

    systemctl enable clean-user-tmp.service
    ou
  • escreva você mesmo um /home/user/.local/share/systemd/user/clean-tmp.service e ative-o com

    systemctl --user enable clean-tmp.service
    .

Leitura adicional

por 19.12.2017 / 14:18