【发布时间】:2020-08-26 10:54:57
【问题描述】:
我有一个 python 脚本,它定期扫描文件夹以供 ffmpeg 处理。我决定把它变成一个系统服务。该脚本在命令行上运行良好,但当我尝试将其作为服务运行时会引发 BlockingIOError。为了解决这个问题,我将脚本归结为一个几乎是 hello world 的示例,但我仍然得到相同的结果。这是我所拥有的:
foobar.py
import subprocess
result = subprocess.run(['/usr/bin/ffmpeg', '-h'])
print(result)
foobar.service
[Unit]
Description=foobar
[Service]
Type=simple
TasksMax=1
User=root
Environment="PATH=/usr/bin:/root/24-7"
ExecStart=/usr/bin/python3.8 /root/24-7/foobar.py
例外
Aug 26 12:47:55 Ubuntu-1804-bionic-64-minimal systemd[1]: Started foobar.
Aug 26 12:48:15 Ubuntu-1804-bionic-64-minimal python3.8[4539]: Traceback (most recent call last):
Aug 26 12:48:15 Ubuntu-1804-bionic-64-minimal python3.8[4539]: File "/root/24-7/foobar.py", line 6, in <module>
Aug 26 12:48:15 Ubuntu-1804-bionic-64-minimal python3.8[4539]: result = subprocess.run(['/usr/bin/ffmpeg', '-h'])
Aug 26 12:48:15 Ubuntu-1804-bionic-64-minimal python3.8[4539]: File "/usr/lib/python3.8/subprocess.py", line 489, in run
Aug 26 12:48:15 Ubuntu-1804-bionic-64-minimal python3.8[4539]: with Popen(*popenargs, **kwargs) as process:
Aug 26 12:48:15 Ubuntu-1804-bionic-64-minimal python3.8[4539]: File "/usr/lib/python3.8/subprocess.py", line 854, in __init__
Aug 26 12:48:15 Ubuntu-1804-bionic-64-minimal python3.8[4539]: self._execute_child(args, executable, preexec_fn, close_fds,
Aug 26 12:48:15 Ubuntu-1804-bionic-64-minimal python3.8[4539]: File "/usr/lib/python3.8/subprocess.py", line 1637, in _execute_child
Aug 26 12:48:15 Ubuntu-1804-bionic-64-minimal python3.8[4539]: self.pid = _posixsubprocess.fork_exec(
Aug 26 12:48:15 Ubuntu-1804-bionic-64-minimal python3.8[4539]: BlockingIOError: [Errno 11] Resource temporarily unavailable
Aug 26 12:48:15 Ubuntu-1804-bionic-64-minimal systemd[1]: foobar.service: Main process exited, code=exited, status=1/FAILURE
Aug 26 12:48:15 Ubuntu-1804-bionic-64-minimal systemd[1]: foobar.service: Failed with result 'exit-code'.
不知道还有什么可以尝试的。我做到了,我什至尝试用 sleep() 延迟通话,看看是否可能等待几秒钟会打开任何阻塞的东西。我不知道该尝试什么。有人知道吗?
【问题讨论】:
-
“我将脚本归结为一个几乎是 hello world 的示例” -- 谢谢。很少有人真正做到这一点,看到一个这样做的问题令人耳目一新。我已经相应地投票赞成这个问题。