小编Pet*_*rch的帖子

无法在Docker中使用sudo命令,显示"bash:sudo:command not found"

我使用以下命令"docker run -it b.gcr.io/tensorflow/tensorflow:latest-devel"安装了TensorFlow,我需要在Windows机器上设置TensorFlow服务.我按照" https://github.com/tensorflow/serving/blob/master/tensorflow_serving/g3doc/setup.md "中的说明进行操作,并在安装TensorFlow服务依赖项时运行下面提到的sudo命令:

docker run -it b.gcr.io/tensorflow/tensorflow:latest-devel
Run Code Online (Sandbox Code Playgroud)

显示以下错误:

sudo apt-get update && sudo apt-get install -y \
     build-essential \
     curl \
     git \
     libfreetype6-dev \
     libpng12-dev \
     libzmq3-dev \
     pkg-config \
     python-dev \
     python-numpy \
     python-pip \
     software-properties-common \
     swig \
     zip \
     zlib1g-dev
Run Code Online (Sandbox Code Playgroud)

sudo docker tensorflow-serving

8
推荐指数
3
解决办法
3万
查看次数

缓存和避免缓存加盖 - 多个同时计算

我们有一个非常昂贵的计算,我们想缓存.所以我们做类似的事情:

my $result = $cache->get( $key );

unless ($result) {
    $result = calculate( $key );
    $cache->set( $key, $result, '10 minutes' );
}

return $result;
Run Code Online (Sandbox Code Playgroud)

现在,在calculate($key)我们将结果存储到缓存之前,其他几个请求进入,也开始运行calculate($key),并且系统性能受到影响,因为许多进程都计算相同的事情.

想法:让我们在缓存中放置一个正在计算值的标志,因此其他请求只是等待那个计算完成,所以他们都使用它.就像是:

my $result = $cache->get( $key );

if ($result) {
    while ($result =~ /Wait, \d+ is running calculate../) {
        sleep 0.5;
        $result = $cache->get( $key );
    }
} else {
    $cache->set( $key, "Wait, $$ is running calculate()", '10 minutes' );
    $result = calculate( $key );
    $cache->set( $key, $result, '10 minutes' ); …
Run Code Online (Sandbox Code Playgroud)

perl caching

7
推荐指数
1
解决办法
313
查看次数

覆盖默认Apache <VirtualHost>块中的单个设置

在debian的默认apache2配置中,/etc/apache2/sites-enabled/000-default包含许多默认VirtualHost的设置:

<VirtualHost *:80>
    # Many good settings here, among them:
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

在另一个配置文件中,我想覆盖它们中的一个,即CustomLog设置,以便日志转到其他地方.我不想复制或搞乱所有其他设置,例如ScriptAlias.但我仍然希望它适用于<VirtualHost *:80>.

那可能吗?

我尝试了什么

我试过这个 /etc/apache2/sites-enabled/001-mylog:

<VirtualHost *:80>
    CustomLog ${APACHE_LOG_DIR}/my.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

这没有任何影响,大概是因为apache只查看第一<VirtualHost>部分,然后/etc/apache2/sites-enabled/000-default才加载/etc/apache2/sites-enabled/001-mylog.

相反,我尝试将相同的片段放入/etc/apache2/conf.d/mylog,之前加载,/etc/apache2/sites-enabled/000-default因为/etc/apache2/apache2.conf有一个Include conf.d/之前Include sites-enabled/.这确实覆盖了CustomLog我想要的价值.但是现在这个ScriptAlias从未/etc/apache2/sites-enabled/000-default生效.

我想避免重复一切,从/etc/apache2/sites-enabled/000-default有效创建默认debian apache配置文件的fork.

文档

Apache HTTP Server - 核心文档相当模糊:

收到请求后,服务器首先根据本地IP地址和端口组合将其映射到最佳匹配.非通配符具有更高的优先级.如果根本不发生基于IP和端口的匹配,则使用"主"服务器配置.

如果多个虚拟主机包含最匹配的IP地址和端口,则服务器会根据请求的主机名从这些虚拟主机中选择最佳匹配.如果未找到匹配的基于名称的虚拟主机,则将使用与IP地址匹配的第一个列出的虚拟主机.因此,给定IP地址和端口组合的第一个列出的虚拟主机是该IP和端口组合的默认虚拟主机.

<VirtualHost> 表现得不像 <Directory> …

apache vhosts

7
推荐指数
1
解决办法
3208
查看次数

如何从命令行* 将 -Xlint:unchecked 添加到 Gradle?

我们的旧代码库时常使用已弃用和未经检查的 API,我们在输出中得到这些:

Note: C:\path\to\MyClass.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Run Code Online (Sandbox Code Playgroud)

-Xlint:unchecked好的,那么如何从命令行重新编译 with而不进行更改build.gradle?许多其他答案显示了如何通过将其添加到build.gradle(或类似于build.gradle.kts)来修复它:

gradle.projectsEvaluated {
   tasks.withType(JavaCompile) {
        options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
    }
}
Run Code Online (Sandbox Code Playgroud)

但这需要编辑文件(创建 git diff),并且只是一个痛苦...是否有某种方法,环境变量,命令行选项或其他东西来添加编译器参数而不触及文件build.gradle*

gradle

7
推荐指数
1
解决办法
3057
查看次数

“登录超时”设置和功能的原因是什么?

如果应用程序将用户重定向到 Keycloak 登录页面,并且该页面停留的时间超过“登录超时”(默认 5 分钟),那么当用户输入用户名和密码(而不是登录)时,她会看到以下内容:

\n
\n

您登录的时间太长。登录过程从头开始。

\n
\n

登录页面超时

\n

为了避免这种情况,可以将“领域设置 \xe2\x86\x92 令牌 \xe2\x86\x92 登录超时”更改为例如 10000 天,即 27 年,这应该确保这种情况在现实中永远不会发生。

\n

但在我们继续有效地禁用此超时之前,我们想问:此超时的目的是什么?显然有人不厌其烦地实施了它,但它能防止什么?禁用它会产生什么(安全?)后果?

\n

keycloak

7
推荐指数
1
解决办法
9091
查看次数

为什么`ack`与`bash`这样使用时不会产生输出?

我猜这与此无关,ack但更多的是bash:

这里我们创建file.txt包含字符串,foobar因此ack可以foobar在其中找到:

> echo foobar > file.txt
> echo 'ack foobar file.txt' > ack.sh
> bash ack.sh
foobar
> bash < ack.sh
foobar
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.为什么不在这里找到任何东西?

> cat ack.sh | bash
(no output)
Run Code Online (Sandbox Code Playgroud)

要么

> echo 'ack foobar file.txt' | bash
(no output)
Run Code Online (Sandbox Code Playgroud)

为什么在最后两个案例中ack找不到foobar

unbuffer在前面添加(从期望)使它工作,我不明白:

> echo 'unbuffer ack foobar file.txt' | bash
foobar
Run Code Online (Sandbox Code Playgroud)

更奇怪的是:

> cat ack2.sh
echo running
ack foobar file.txt
echo running …
Run Code Online (Sandbox Code Playgroud)

bash ack

6
推荐指数
1
解决办法
179
查看次数

docker-desktop 使用 12 GB RAM 来运行一个具有 24 MB RAM 的容器?

在我看来,WSL2 容器docker-desktop正在使用 12 GB RAM 来运行一个具有 24 MB RAM 的容器。是什么赋予了?(详情如下)。

另外,当我将 中所有进程的所有驻留 RAM (VSZ) 加起来时docker-desktop,总数仅为 4687251 KB 或 4.4 GB,那么剩余的 7 GB RAM 到哪里去了?

我尝试从任务栏重新启动 Docker Desktop,并尝试终止docker-desktopWSL2 容器(使用wsl.exec -t),这两者都没有什么区别。我重新启动了整个 Windows 机器,现在它使用了更加合理的 2GB RAM。与我使用 595MB RAM 的 Ubuntu 20.04 WSL2 相比,这仍然是很多。

那么:为什么要docker-desktop使用 12GB RAM 来服务一个小容器呢?我可以在不重新启动整个机器的情况下解决这个问题吗?

# What is docker-desktop-data? It doesn't support any commands...
$ wsl.exe -d docker-desktop-data free -m

# docker-desktop is using approx 12 GB RAM
$ wsl.exe -d …
Run Code Online (Sandbox Code Playgroud)

memory-management docker-desktop wsl-2

6
推荐指数
1
解决办法
1万
查看次数

vs-code:如何从命令行打开当前 WSL 文件夹 *as wsl*?

如何在我的非 vs-code 终端中执行此操作:

wsl:/home/peter/myproject$ code .
Run Code Online (Sandbox Code Playgroud)

然后在新的 WSL 窗口中或以某种方式在 WSL 模式下myproject在 Visual Studio Code 中打开?

可以使用以下命令将当前文件夹作为“普通”Windows 文件夹打开:

"$(wslpath 'C:\Users\pvm\AppData\Local\Programs\Microsoft VS Code\Code.exe')" .
Run Code Online (Sandbox Code Playgroud)

但很多事情都不起作用,因为它没有作为 WSL 文件夹打开。但是,我可以单击红色箭头指向的位置,然后单击绿色箭头指向的位置。

在 wsl 中重新打开文件夹的代码屏幕截图

作为替代方案,我可以在 VS Code 中打开 WSL 窗口,然后从那里打开终端。从代码中的终端内部,我可以导航到文件夹并输入code .. 然后它会完全按照我想要的方式打开,但这只能从代码中的终端进行,而不是从独立的“普通”WSL 终端进行。如果尝试从普通终端运行相同的代码命令,则会收到一条消息“命令仅在 WSL 或 Visual Studio Code 终端内可用”。错误。这是设计的

所以问题仍然存在:如何在 WSL 模式下在 VS Code 中从独立 WSL 终端打开文件夹?

visual-studio-code windows-subsystem-for-linux wsl-2

6
推荐指数
1
解决办法
5290
查看次数

从脚本运行时避免gpg-agent出现问题-gpg2

我试图使用gpg--clearsign一个文件(Debian的包装用途)从脚本

我有一个导出的无密码private-key.gpg文件,想要:

gpg --clearsign -o output input
Run Code Online (Sandbox Code Playgroud)

我不想与当前用户的混乱~/.gnupg或者/run/user/$(id -u)/gnupg是因为他们什么都没有做我的脚本。另外,该脚本可能同时在多个实例中运行,我不希望它们相互干扰。

我认为那很容易。设置$GNUPGHOME为临时目录并完成。但我无法弄清楚如何让gpg一个脚本,而不与用户的标准配置搞乱运行在所有。似乎gpg已竭尽全力使之无法避免,gpg-agentgpg-agent坚持使用全局/硬编码路径。

我可以保留一切$GNUPGHOME?或者如何在gpg不影响用户配置或脚本的使用gpg或其他实例的情况下从shell脚本安全使用?

细节

阅读gpg文档,我发现:

--use-agent
--no-use-agent

    This is dummy option. gpg always requires the agent.
Run Code Online (Sandbox Code Playgroud)

gpg-agent文件说:

--use-standard-socket
--no-use-standard-socket
--use-standard-socket-p

    Since GnuPG 2.1 the standard socket is always used.
    These options have no more …
Run Code Online (Sandbox Code Playgroud)

bash gnupg gpg-agent

5
推荐指数
1
解决办法
212
查看次数

如何解决 MySQL `ERROR 1205 (HY000): Lock wait timeout exceeded; 尝试重新启动事务`

我似乎无法提取从MySQL任何有用的信息,以帮助我调试这个错误:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction。你能帮我找一些吗?

再生产:

一个进程做这样的事情:

start transaction;
update cfgNodes set name="foobar" where ID=29;
Run Code Online (Sandbox Code Playgroud)

只是坐在那里(不承诺,不回滚)。这显然是罪魁祸首 - 由于长时间运行的事务而占用锁的过程 - 我试图找到的罪犯。

另一个进程尝试:

-- The next line just prevents you from having to wait 50 seconds
set innodb_lock_wait_timeout=1;

update cfgNodes set name="foobar" where ID=29;
Run Code Online (Sandbox Code Playgroud)

这第二个过程得到ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction(之后innodb_lock_wait_timeout,默认 50 秒)

我如何找到有关罪犯的任何信息?

mysql locking

5
推荐指数
1
解决办法
2112
查看次数