2 votes

Je pense que j'ai fait sauter mon serveur avec une tâche cron. Que se passe-t-il et comment puis-je récupérer ?

J'ai programmé un simple Python script pour qu'il s'exécute toutes les minutes sous l'utilisateur foo

SHELL=/bin/bash
BASH_ENV=/home/foo/.bash_profile

* * * * * python /home/foo/slack-bot/main.py 2>&1 /home/foo/slack-bot.log

Après quelques minutes, j'ai obtenu ces erreurs et j'ai été rapidement expulsé de mon serveur.

-bash: fork: Cannot allocate memory
-bash: wait_for: No record of process 32012
-bash: fork: Cannot allocate memory
-bash: wait_for: No record of process 32012
....

Uh oh. J'ai donc essayé de me connecter en tant que root et le sudo-ing comme foo

sudo -iu foo
sudo: unable to execute /bin/bash: Cannot allocate memory

Super.

J'ai ensuite supprimé la ligne incriminée du fichier foo dans le fichier crontab de l'utilisateur, et a également tué tous les processus avec slack au nom

kill $(ps aux | grep 'slack' | awk '{print $2}')

J'obtiens maintenant une erreur différente, mais je ne peux toujours pas sudo cet utilisateur :

sudo -iu foo
-bash: xmalloc: .././copy_cmd.c:86: cannot allocate 32 bytes (450560 bytes allocated)

Qu'est-ce qui se passe ici ? Je suis sûr qu'il y a une erreur dans mon programme cron que je vais examiner, mais quel type de comportement provoque les erreurs de fourchette de mémoire ? Quelle est la meilleure façon de récupérer, à part un hard-reset ?

Merci !

1voto

Scott Stensland Points 12948

C'est un modèle de lancement commun - cela dépend de ce dont vous avez besoin ... vous pouvez

  • augmenter le temps entre les lancements de processus pour augmenter la probabilité que le processus précédent soit terminé
  • identifier si le lancement précédent est toujours en cours si c'est le cas terminer
  • créer un démon à longue durée d'exécution au lieu d'un processus à courte durée d'exécution
  • lancer - faire le travail puis terminer - faire en sorte qu'un processus de surveillance ne lance le nouveau lancement que lorsqu'il découvre qu'il n'est pas en cours d'exécution (à la supervisord).

sans connaître le cas d'utilisation, il est difficile de procéder

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X