Tenho certeza que você não pode definir limites em um serviço através do limits.conf, mas apenas em um espaço de usuário.
O Crontab executa scripts no espaço de usuário designado, definido a partir de / etc / crontab via nome de usuário ou do crontab pessoal do usuário. Portanto, os limites devem ser aplicados em um nível de espaço do usuário ou de dentro do próprio script. Mas é correto que você precise ativar os limites em pam.d / cron, pois isso permite que o cron aplique os limites do usuário ao executar o script.
Configurei um pequeno cenário de teste para podermos verificar como limitar os cronjobs de um usuário.
1) Feito um usuário chamado crontest
2) Adicionada uma linha ao limits.conf
crontest hard as 50000
3) Feito um script de teste rápido para alocar memória. Você pode encontrar um exemplo de fonte na Internet que seja melhor do que o meu, mas funciona.
#include <malloc.h>
#include <unistd.h>
#include <memory.h>
#define MB 1024 * 1024
int main() {
int size;
size = 0;
while (1) {
void *p = malloc( 10*MB );
memset(p,0, 10*MB );
size = 10+size;
printf("Using %d MB\n",size);
sleep(1);
}
}
Salve o código-fonte acima no mem.c e digite o seguinte para compilá-lo.
gcc mem.c -o mem
cp mem /bin/mem
Agora para testar
Como root, executei o script de teste de mem e esta é a saída. Como você pode ver eu posso alocar mais de 50MB de RAM (AddressSpace)
# mem
Using 10 MB
Using 20 MB
Using 30 MB
Using 40 MB
Using 50 MB
Using 60 MB
^C
Eu mudei para o meu novo usuário de teste e tentei o mesmo.
$ mem
Using 10 MB
Using 20 MB
Using 30 MB
Using 40 MB
Segmentation fault
Como você pode ver, o sistema me interrompeu quando tentei alocar os próximos 10 MB que teriam atingido 50 MB (meu limite).
Em seguida, adicionei o seguinte ao / etc / crontab
* * * * * crontest /bin/mem
Salvei o crontab e esperei o cron gerar meu script de espaço do usuário sob o usuário crontest. Agora eu podia ver que as mesmas coisas se aplicavam ao script crontab dos meus usuários.
Saída do cron.log mostrando o script iniciado
Nov 22 16:52:01 server CRON[31460]: (crontest) CMD (/bin/mem)
Saída do syslog mostrando o script morrendo novamente.
Nov 22 16:52:05 server kernel: [624832.216083] mem[31464]: segfault at 8 ip 00007f87868f51b8 sp 00007ffce83fa058 error 6 in libc-2.24.so[7f8786871000+195000]
Então, como você pode ver, o limite se aplica tanto ao ambiente do usuário ao fazer o login quanto ao cronjobs. Então eu acho que você precisa dar uma olhada no seu arquivo limits.conf eu não acho que está correto.