O trap tem que ter sido ativado / instalado no momento em que você pressionar Ctrl + C , ou (obviamente) não irá disparar. A função também deve ter sido definida nesse ponto. Isso significa mover o código até o topo (em algum lugar no começo) do seu script.
Adicionalmente, você provavelmente deve definir a função antes de instalar o trap, ou você receberá um erro "not found" se o trap for disparado entre os dois.
Exemplo:
#!/bin/bash
cleanup() { echo 'Exiting script ...'; }
trap cleanup SIGINT
sleep 300