我安排了一个简单的 Python 脚本在用户下每分钟运行一次foo
SHELL=/bin/bash
BASH_ENV=/home/foo/.bash_profile
* * * * * python /home/foo/slack-bot/main.py 2>&1 /home/foo/slack-bot.log
几分钟后,我收到了这些错误,并很快被踢出了服务器
-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
....
哦哦。所以我尝试以 身份登录,root
并以 sudo 身份登录foo
sudo -iu foo
sudo: unable to execute /bin/bash: Cannot allocate memory
伟大的。
然后我从用户的 crontab 文件中删除了有问题的行foo
,并终止了slack
名称中包含的所有进程
kill $(ps aux | grep 'slack' | awk '{print $2}')
我现在收到了不同的错误,但我仍然无法 sudo 该用户:
sudo -iu foo
-bash: xmalloc: .././copy_cmd.c:86: cannot allocate 32 bytes (450560 bytes allocated)
这是怎么回事?我确信我的 cron 计划中存在错误,我会调查,但什么样的行为会导致内存不足的分叉错误?除了硬重置之外,最好的恢复方法是什么?
谢谢!
答案1
这是一种常见的启动模式 - 取决于你的需要......你可能会
- 增加流程启动之间的时间来增加提前完成的可能性
- 确定之前的启动是否仍在运行,如果是则终止
- 创建长时间运行的守护进程,而不是短时间运行的进程
- 启动 - 执行工作然后终止 - 仅当发现其未运行时,才让观察者进程启动新的启动(a la supervisord)
不知道用例就很难继续