如何让`lua执行cmd'sudo'命令而不需要手工输入passwd`?
我正在训练使用LuaTorch的模式。最近,我面临一个恼人的问题。随着时间的推移,程序运行越来越慢!当我执行 sudo sysctl -w vm.drop_caches=3
然后程序运行得更快。但是,大约一天之后,它又一次减速。我使用top
检查缓冲区和缓存,发现它们非常高。如何让`lua执行cmd'sudo'命令而不需要手工输入passwd`?
第一个问题:如果在训练模型时使用该命令释放缓冲区和缓存,那么这很重要吗? 我最初的想法是检查每个纪元逝去的时间,并在逝去时间长于预设值时调用cmd命令。
if time_elapse > time_out then
os.execute('sudo sudo sysctl -w vm.drop_caches=3')
end
但是,它需要您第一次调用passwd manuly输入。如何使用lua代码来避免手动输入代码?
要直接回答您的问题:允许您的用户在不输入密码的情况下执行sysctl -w vm.drop_caches=3
命令。
如果名为naruto
的用户正在运行您的lua脚本,请将以下行添加到/etc/sudoers
(或者更好,请在/etc/sudoers.d
中为其创建一个文件)。
naruto ALL=(ALL) NOPASSWD: /usr/sbin/sysctl -w vm.drop_caches=3
这将允许naruto
作为根执行的确切命令而无须提供口令。
至于潜在的问题,这里有更多的研究。你永远不会想要删除页面缓存。这只是一个缓存,而且这个内存并没有被实际使用。通读非常有帮助的页面在http://www.linuxatemyram.com/,特别是,请在末尾警告标志部分(见下文,从该页面的引用):
警告标志的正品内存不足情况那你可能想看看 到:
- 可用内存(或“免费+缓冲区/高速缓存”)接近于零调剂
- 用于增加或变动
- dmesg | grep的OOM杀手显示theOutOfMemory杀手在工作
的sysctl -w vm.drop_caches=3
通过强制换页回主内存很可能加快你的进程。这可能意味着您的系统被配置为过于积极地进行交换。您可以通过修改vm.swappiness
来配置swappiness。许多Linux发行版将此值默认为60
。尝试将其降低到10
以鼓励内核将您的进程保留在内存中。 swappiness Wikipedia entry有关于修改它的更详细说明。这并不能回答你的直接问题,迈克钉住了这一点,但它可能有助于解决你的根本问题。
你应该在你的代码中找到问题,而不是做一些操作系统级别的诡计。 –
'sudo'可以从标准输入读取密码:'echo'password'| sudo -S命令“ –