将Discord机器人转换为后台进程的准备步骤
前提 tí)
首先,我对于”daemon”的理解是,在计算机启动时就会在后台持续运行,并且即使重新启动计算机,它也会自动启动。然而,我的理解可能是错误的,可能存在一些不一致,在本文中我将进行解释。
-
- 裏でずっと動いてる
- 起動時に自動的にプログラムが実行される
在这种意义上,我们使用”daemon”这个词。
另外,在标题中我写了想让 Discord 机器人变为守护进程,但并不是要在某个服务器上运行它,而是在本地环境中作为守护进程运行。也就是说,并不是真正让 Discord 机器人常驻。当你启动电脑时,Discord 机器人也会自动启动,就像这种感觉。
此外,环境也是一个重要因素。
- WSL, Ubuntu22.04.1
這是。
为了daemon进行准备工作
首先,您需要使程序可以在计算机上运行。为此,您需要使用chmod命令来给文件添加执行权限。关于权限更改,我在Linux权限确认和更改(适用于超级初学者)的文章中找到了一些信息,我认为您可以查看该文章。
给予执行权限后执行
首先,我们创建一个相应的文件作为实验,将要执行的shell脚本放入其中。
$ touch somefile
$ echo "echo \"this is runnable?\"" > somefile
$ cat somefile
echo "this is runnable?"
我给这个somefile文件添加执行权限。
$ ls -l
-rw-r--r-- 1 user user 18 Dec 16 21:13 somefile
$ chmod +x somefile
$ ls -l
total 4
-rwxr-xr-x 1 user user 18 Dec 16 21:13 somefile
已经授予。
让我们试试看。我理解执行需要指定到文件的相对路径。只需要指定到自己目录下的某个文件名为somefile的文件就可以了。
$ ./somefile
this is runnable?
文字列返回了。也就是说,echo命令被执行了。在这种情况下,尝试执行Python文件也会被解释为shell脚本,因此会产生错误。
$ cat pyfile.py
import os
print(os.getenv("EXAMPLE"))
$ ./pyfile.py
./pyfile.py: line 1: import: command not found
./pyfile.py: line 3: syntax error near unexpected token `os.getenv'
./pyfile.py: line 3: `print(os.getenv("EXAMPLE"))'
因此,您需要指定使用哪个命令来执行该文件。这就需要使用Shebang。
摘要、全套、全部
请阅读关于”shebang”的文章,通过实践来理解它。我大致只知道它可以用来描述执行该文件的命令。
とりあえず,pythonのファイルを動かせるようにしましょう.
#! /usr/bin/env python3
import os
print(os.getenv("EXAMPLE"))
$ ./pyfile.py
None
実行できました.EXAMPLEという環境変数は存在しないのでNoneが表示されています.
/usr/bin/env
使用环境变量指定的程序路径。
只要执行此/usr/bin/env,就能了解它是什么。
$ /usr/bin/env
SHELL=/bin/bash
WSL2_GUI_APPS_ENABLED=1
WSL_DISTRO_NAME=Ubuntu-22.04
......
以类似这样的方式,它可以单独使用并显示环境变量。顺便提一句,我在解释环境变量设置的文章中稍微提到了这个”env”,如果您能读一下,我会很高兴。
在这个环境中,您可以同时设置环境变量并执行命令。
我们先准备一个不使用shebang的Python文件。
import os
print(os.getenv("EXAMPLE"))
对此,我们可以通过在环境中设置 EXAMPLE 的值,并执行。
$ env EXAMPLE=example python3 pyfile_nosb.py
example
只需要一种选择。这样,我们可以为EXAMPLE输入值并执行。
これをShebangを使ってすることもできます.ただし,Shebang内で複数引数を渡すときは最初に-Sオプションを付ける必要があります.
#! /usr/bin/env -S EXAMPLE=example python3
import os
print(os.getenv("EXAMPLE"))
$ ./pyfile.py
example
环境变量已经设置并执行了呢。
本題に戻ると,envをShebangで利用すると,環境に依存したpython3を探して実行してくれます.他のコマンドでも同様です.
现在已准备好将其转为守护程序了。