.net core Cronjob不断减少可用磁盘空间

.net core Cronjob不断减少可用磁盘空间,.net-core,cron,rc,linux-df,.net Core,Cron,Rc,Linux Df,我有一个.NETCore3.0控制台应用程序,运行在Ubuntu 18.04服务器上。在我的主文件夹中有一个简单的启动程序脚本,名为my app.sh: cd /home/service/my-app ./My-App 我想在重新启动后启动文件,所以我使用crontab-e,为启动程序脚本创建了一个cronjob: @reboot /home/service/my-app.sh 重新启动后,MyApp运行正常。但是,当反复调用df时,我注意到/的可用磁盘空间在不断减少!我试图找出它是哪一个文

我有一个.NETCore3.0控制台应用程序,运行在Ubuntu 18.04服务器上。在我的主文件夹中有一个简单的启动程序脚本,名为
my app.sh

cd /home/service/my-app
./My-App
我想在重新启动后启动文件,所以我使用
crontab-e
,为启动程序脚本创建了一个cronjob:

@reboot /home/service/my-app.sh
重新启动后,MyApp运行正常。但是,当反复调用
df
时,我注意到
/
的可用磁盘空间在不断减少!我试图找出它是哪一个文件,但
ncdu
并没有显示出随时间变化的任何差异。我没有在MyApp中写入文件,即
/home/service
的总大小没有增加。大约10分钟后,整个可用空间消失,MyApp被系统退出

当我在重新启动后取消MyApp时,我看到“内存泄漏”立即停止。但是:当我手动重新启动MyApp时,内存不再泄漏

现在我尝试删除cronjob,并将启动程序脚本添加到
/etc/local.rc
文件中:

# Start MyApp
su service -c 'sh /home/service/my-app.sh' &
同样,它在重新启动后启动得非常好,并且不再有内存泄漏

我根本不知道会出什么问题。手动启动或从
/etc/local.rc
启动时没有问题,但仅从cronjob启动时没有问题。知道有什么问题吗

tl;dr避免在控制台应用程序中进行用户交互(例如ReadLine()等待特定输入)

细节:我知道发生了什么。下面是我的控制台应用程序C#代码的最后一部分:

// App can be quit by keyboard input "exit"
while (true) {
    Console.WriteLine("Enter 'exit' to close MyApp.");
    if (Console.ReadLine() == "exit")
        break;
}
使用这段代码,我想让程序一直运行,直到用户输入
exit
,或者直到这个“服务”被终止。不幸的是,由Cron或
/etc/rc.local
启动的程序跳过了
ReadLine()
,进入了一个无休止的循环,用无休止的
输入“退出”来关闭MyApp,从而弄乱了内存(可能在硬盘上交换)。
行。 虽然
/etc/rc.local
似乎在不断释放内存,但cronjob需要越来越多的内存。不知道为什么,只是观察而已

解决办法很简单。我删除了交互并添加了以下无害的无止境循环,等待进程被终止:

// App can only be stopped by killing the process
Console.WriteLine("Started in service mode. To close MyApp, kill the process.");
while (true) {
    Thread.Sleep(1000);
}