我在 Alpine Linux 上运行非 root crontab 文件时遇到了麻烦。
我已经阅读了另外两个与 cron 相关的帖子,但我没有答案:
https://askubuntu.com/questions/23009/why-crontab-scripts-are-not-working
https://serverfault.com/questions/449651/why-is-my-crontab-not-working-and-how-can-i-troubleshoot-it
这是设置。
我的 crontab 看起来像这样:
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin
SHELL=/bin/bash
* * * * * /opt/monitor/monitor.sh >> /var/log/monitor.log 2>&1
0 3 * * * /opt/monitor/monitor-log-clean.sh >> /var/log/monitor.log 2>&1
Run Code Online (Sandbox Code Playgroud)
我的 Dockerfile 现在有点乱,但这只是因为我一直在拼命尝试解决这个问题。它看起来像这样。简而言之,我为 crontab -e 添加 SUID 以作为其他用户工作,我创建我的用户,我导入我的 crontab 文件,然后我为我能想到的所有内容提供权限。
FROM alpine:3.5
# DEPENDENCY TO ALLOW USERS TO RUN crontab -e
RUN apk add --update busybox-suid
# I LIKE BASH
RUN apk --no-cache add bash bash-doc
RUN apk --no-cache add util-linux pciutils usbutils coreutils …Run Code Online (Sandbox Code Playgroud) 出于好奇,我今天尝试运行此代码(使用 编译gcc -m32 1.c):
int main(void)
{
// EB is the opcode for jmp rel/8
// FE is hex for -2
// So this is essentially an infinite loop
((void(*)(void))"\xEB\xFE")();
}
Run Code Online (Sandbox Code Playgroud)
......它奏效了!没有段错误,程序(正确?)进入无限循环。查看反汇编 ( objdump -d a.out),您可以看到对...的调用,无论地址是什么0x8048480:
080483d6 <main>:
....
80483e7: b8 80 84 04 08 mov $0x8048480,%eax
80483ec: ff d0 call *%eax
....
Run Code Online (Sandbox Code Playgroud)
objdump -s -j .rodata a.out 给出:
Contents of section .rodata:
8048478 03000000 01000200 ebfe00 ...........
~~~~
Run Code Online (Sandbox Code Playgroud)
所以它确实在执行存储在.rodatasection中的字符串。所以我跑了readelf --sections a.out …
无论我是在某处设置新的 VPS 还是在我坐着的旧计算机上安装 Ubuntu ISO,当我想要设置我最喜欢的编程环境时,我需要做的就是输入
sudo apt-get install foo baz bar
Run Code Online (Sandbox Code Playgroud)
然后我的电脑——做一些事情——最后我通常拥有我想要的软件。
这是如何运作的?正在apt-get下载预编译的二进制文件吗?还是为我下载源代码和构建东西?或者某种其他打包的东西正在安装?还是三个都可以?无论如何,谁在构建这些二进制文件,管理这些构建配方,或者将这些包放在一起?无论 apt-get 在做什么——它从哪里发送给我的数据?
我模糊地知道我的作曲家/VPS 将有一个apt-get它检查包的存储库列表。这些只是托管在某个指向事物的 HTTP 服务器上的提要吗?或者是其他东西?谁托管这些提要?
当我使用像 composer(用于 PHP)这样的包管理器时,我知道在 packagist.org composer 存储库中有一个主包列表,用户可以指定其他包存储库,并且该存储库仅指向版本控制系统,其中存储包的源文件。我想对apt-get工作原理有类似的高层次理解。
我意识到这是一个不可能广泛的问题 - 指向我可以在 FM 中阅读有关所有内容如何联系在一起的指示对我来说是一个完全可以接受的答案。(尽管如果您对 linux 包管理充满热情,请不要让这阻止您回答)
我是 docker swarm 模式的新手。如您所知,可以启动/停止 docker 容器,但我认为不可能在 swarm 中执行此操作。
例如,我已经部署了 swarm 并使用副本(2/2)创建了新任务:
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
2o3a6z30q9df contactactivity replicated 2/2 myimage/live-springboot-myservice:19ff0be1f0087asd1dasdb52c345151e9985b4a5a2 *:111->1111/tcp
Run Code Online (Sandbox Code Playgroud)
是否可以在不移除一个 swarm 容器的情况下停止它并在将来将其带回来?
PS我只是想澄清删除或重新创建 - 在我的情况下不是选项。
让 Q 清楚:如果你停止容器然后启动 - 这个容器不会成为 swarm 的一部分。我无法相信在 swarm 模式下无法进行简单的重启或启动/停止。
我有项目(ASP.NET Core,在 Linux 上),其中有几个任务与视频转换和从视频文件中提取帧有关。
我考虑了两种可能的选择:
ffmpeg控制台实用程序P/Invoke与libavcodec图书馆和其他人,其ffmpeg用途第二种选择更难,可能非常不切实际,因为它提醒我开发新的包装器/库,而不是使用现成的产品。
我已经完成了谷歌搜索,但没有针对 Linux 平台上的 C#/ASP.NET Core 做好的项目。有一些适用于 C++ 和 Python,但不适用于 Linux/.NET Core 上的 C#。
我决定看第一个选项,我认为它会更容易和实用。但是,也有一些薄弱的地方,这会产生很多问题。我们理解(我想),使用第一个选项,最终开发人员应使用进程分叉。因此,进程空闲和其他可能的问题可能存在问题......
我问的是你的做法,因为这是我第一次在 Linux 平台上使用 C# 进行视频转换/采样。我已经在 Windows 平台上使用了Expression Encoder .NET 库,但它是另一回事,现在没有任何意义。
可能还有其他选项,我目前看不到。我不喜欢第一个选项,因为可能存在未处理的异常,因为ffmpeg这样的角色成为 ASP.NET Core 后端的黑匣子。
我想运行 bash 命令 throw Jenkins 管道,我正在调用一个具有一些 bash 命令的函数,但出现此错误:
Run Code Online (Sandbox Code Playgroud)java.lang.NoSuchMethodError: No such DSL method 'bash' found among steps
这是函数:
def copy_tools(){
Run Code Online (Sandbox Code Playgroud)// tools bash '''#!/bin/bash mkdir X6//CX6 cp ${x6_tools_path} . unzip CX6.zip -d .\\X6 '''}
你能帮忙吗?
我知道对于网卡,操作系统必须为其分配 tx/rx 环,以便当操作系统要接收/传输数据包时,网卡将知道数据包在哪里以及要传输哪些数据包。
当我阅读有关 DMA 的内容时,我看到了名为 DMA 环形缓冲区的内容。DMA环和tx/rx环是同一个东西吗?或者是什么关系?
我使用 Electron 创建了一个应用程序,其中一个功能是用户可以向其中添加文件(复制到应用程序的数据目录)。
当用户想要从应用程序的 UI 打开文件时,我可以使用 Electron 的shell模块打开文件:shell.openItem().
现在我想给用户一个选项来触发系统的“打开方式”对话框(如下所示的窗口),用户可以从中选择用户想要打开文件的应用程序。我搜索了 Electron 的文档并用谷歌搜索,但找不到触发此对话框的方法。任何想法如何为电子支持的所有平台做到这一点。涉及调用操作系统特定命令来触发此对话框的解决方案也同样好。
我正在尝试使用标题中的命令在 raspberry pi 2 (model b, 7 wheezy)、python3.5.1、pip 9.0.1 上安装 Pandas,这是我的终端。
pi@raspberrypi ~ $ sudo pip3 install pandas
Collecting pandas
Using cached pandas-0.21.0.tar.gz
Requirement already satisfied: python-dateutil>=2 in /usr/local/lib/python3.5/site-packages (from pandas)
Requirement already satisfied: pytz>=2011k in /usr/local/lib/python3.5/site-packages (from pandas)
Requirement already satisfied: numpy>=1.9.0 in /usr/local/lib/python3.5/site-packages (from pandas)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.5/site-packages (from python-dateutil>=2->pandas)
Installing collected packages: pandas
Running setup.py install for pandas ... /
Run Code Online (Sandbox Code Playgroud)
我已经这样放置了几个小时,没有任何进展,怎么了?
没有成功,我尝试过:
针对 Andy K 的评论进行编辑,我已尝试使用 apt-get 执行以下操作:
pi@raspberrypi ~ $ …Run Code Online (Sandbox Code Playgroud) 我刚刚开始了解 Yocto。我没有找到太多关于类 (.bbclass) 文件的信息。我知道 .bb 文件是一个包含构建包指令的配方。我们什么时候必须写菜谱,什么时候写一个类或者两者之间有什么区别
linux ×10
docker ×2
alpine-linux ×1
apt-get ×1
asp.net-core ×1
bash ×1
c# ×1
cron ×1
dma ×1
docker-swarm ×1
electron ×1
elf ×1
ffmpeg ×1
jenkins ×1
libavcodec ×1
linux-kernel ×1
macos ×1
networking ×1
nic ×1
node.js ×1
package ×1
paging ×1
python ×1
raspberry-pi ×1
raspbian ×1
windows ×1
x86 ×1
yocto ×1