我创建了一些基本有效的 systemd 服务:
地点:
/etc/systemd/system/multi-user.target.wants/publicapi.service
Run Code Online (Sandbox Code Playgroud)
内容:
[Unit]
Description=public api startup script
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=-/etc/environment
WorkingDirectory=/home/techops
ExecStart=/home/techops/publicapi start
ExecStop=/home/techops/publicapi stop
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
当我尝试在命令行中以 techops 用户身份重新启动服务时,我得到以下输出:
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to start 'publicapi.service'.
Multiple identities can be used for authentication:
1. Myself,,, (defaultuser)
2. ,,, (techops)
Choose identity to authenticate as (1-2):
Run Code Online (Sandbox Code Playgroud)
我希望只有 techops 可以重新启动服务,并且我希望在以 techops 身份登录时不出现此提示。我怎样才能做到这一点?
我读到 polkit-1 或 sudoers 有不同的方法,但我不确定。
[更新] 2019-01-27 4:40pm
感谢您对 Thomas 和 Perlduck 的全面回答。它帮助我提高了对 systemd 的了解。
按照无密码提示启动服务的方法,我要道歉,我没有足够强调真正的问题:
实际上,对我来说最重要的是,除了 techops 之外,没有其他用户应该停止或启动该服务。但至少使用前两种方法我仍然可以运行service …
我的一个 RAM 棒在我的 Ubuntu 10.10 上导致内核恐慌(类似于“不同步”屏幕上显示的大量内存地址)。这绝对是一根 RAM 棒而不是它的插槽,因为当我将其他一根棒插入一根 RAM 棒的插槽时,一切正常。为什么 memtest 在几个周期后没有发现任何错误,但 Ubuntu 在使用这个特殊的 RAM 棒时无法启动?有人对此有解释吗?
显示小于 2 天的文件的确切命令是什么?我想过这样的事情:
$ find / -mtime -2
Run Code Online (Sandbox Code Playgroud)
...但我不确定如何打印找到的文件的日期。我的目标是在已挂载的 ntfs 系统上查找最近几天内新增或更改的文件。
此外,将结果从最新到最旧进行排序将非常有帮助。那可能吗?
2011 年 2 月,我有一个类似的问题:ffmpeg 和 libmp3lame 产生的音频质量很差? 现在我想知道是否有可能从(flash)视频中获得原始音频质量?每次我转换视频时,质量都比原始质量差,差不了多少,但您可以听到差异。这些是我的尝试:
avconv -i ~/"$2.flv" -acodec libmp3lame -c:v libx264 -qscale 1 -aq 1 -q 1 -vol 100 -ab 196608 ~/"$2.avi"
Run Code Online (Sandbox Code Playgroud)
我尝试使用质量最好的 -qscale 1、aq 1 等。我什至尝试使用-same_quant,我已经尝试过-codec copy,显示在此线程中,但是质量不是更好,而是更糟,然后我没有看到任何视频。有没有办法实现这一目标?顺便说一句,我不在乎输出格式。
更新
我通过从 YT 下载视频进行了一些测试,并在 YT 和我的本地机器上收听它。我没有转换视频,我只是听了一个flv文件本身,并确定本地质量比YT上的文件还要差。所以我不确定这是否真的是 avconv 问题。我想知道来自 YT 的流和来自 TY 的下载文件之间的这种质量差异来自哪里。有任何想法吗?
在升级到最新的 Ubuntu 之前,我使用以下命令从 avi 文件中提取 mp3:
$ for x in *.avi; do ffmpeg -vol 100 -ab 160k -ar 44100 -i "$x" "`basename "$x" .avi`.mp3"; done
Run Code Online (Sandbox Code Playgroud)
这奏效了。但是从 Ubuntu 12.04 开始,我找不到 Option sample_rate。当我尝试执行此命令时。如果我省略-ar 44100(或 -sample_rate 44100),它确实会提取 mp3,但在大多数情况下,提取的 mp3 的长度不再适合。这意味着他们有 43 分钟的长度,尽管 avi 的长度只有 5 分钟。
ffmpeg 和 avconv 都存在同样的问题。任何想法如何解决这些问题?
对于客户,我需要向系统添加 boost 1.54。所以我下载了最新版本 (1.55) 并将其构建在一个特殊目录中:/usr/local/lib/boost1.55/。这有效。然后我不得不以这种方式调整 Makefile。
LIBS = $(SUBLIBS) -L/usr/lib/x86_64-linux-gnu -LC:/deps/miniupnpc -lminiupnpc -lqrencode -lrt -LC:/deps/boost/stage/lib -Lc:/deps/db/ build_unix -Lc:/deps/ssl -LC:/deps/libqrencode/.libs -lssl -lcrypto -ldb_cxx -L/usr/local/lib/boost1.55/boost_system-mgw46-mt-sd-1_54 -L/usr /local/lib/boost1.55/boost_filesystem-mgw46-mt-sd-1_54 -L/usr/local/lib/boost1.55/boost_program_options-mgw46-mt-sd-1_54 -L/usr/local/lib/boost1 .55/boost_thread-mgw46-mt-sd-1_54 -lQtDBus -lQtGui -lQtCore -lpthread -lboost_system -lboost_filesystem -lboost_program_options -lboost_thread
在未修改的 Makefile 中,boost 链接如下所示:
-lboost_thread-mgw46-mt-sd-1_54
但这没有用。我无法编译它,因为它没有找到。所以我添加了(如你所见)
-L/usr/local/lib/boost1.55/boost_thread-mgw46-mt-sd-1_54
和
-lboost_thread
否则它也不会编译。成功编译后,我在二进制文件上执行 ldd 并显示:
libboost_system.so.1.53.0 => /usr/lib/x86_64-linux-gnu/libboost_system.so.1.53.0 (0x00007f416c169000) libboost_filesystem.so.1.53.0 => /usr/lib/x86_64-glinux libboost_filesystem.so.1.53.0 (0x00007f416bf52000) libboost_program_options.so.1.53.0 => /usr/lib/x86_64-linux-gnu/libboost_program_options.so.1.53.0 (0x00007f416bf52000).libboost_program_options.so.1.53.0 => usr/lib/x86_64-linux-gnu/libboost_thread.so.1.53.0 (0x00007f416bace000)
1.53 是包管理器安装的版本。我不明白为什么它链接到这个版本。如果我没有安装 1.55,它就不会编译,但现在它不会链接到这个版本。对此有什么解释吗?
实际上我的目标是不使用动态链接库,我还没有想出如何做到这一点,但我仍然想知道为什么上述不能按预期工作。
如果我想编译一个需要分发包管理器未提供的包的应用程序,并且我想从中生成一个分发包,使用此分发包的用户是否需要安装所有这些额外的库,或者将这些库打包到二进制文件中? 我知道它可能取决于应用程序到应用程序,但我如何识别包是否需要动态链接库?