使用 bash 脚本创建守护进程安全吗?

使用 bash 脚本创建守护进程安全吗?

我想创建一个完全自动化的盒子(基于 Raspberry-Pi 或 OLinuXino 卡等)。

我的机器将运行基于 Debian 的系统,带有只读文件系统和 ramdisk(以避免 SD 卡损坏)。

我想创建一个脚本,每次打开盒子或插入网络时,该脚本都会自动连接到远程服务器(通过 ssh)。

为此,我认为最简单的解决方案是创建一个作为守护进程运行的 shell 脚本。该守护进程必须保持活动状态,直到盒子关闭或与网络断开连接。当网络启动或盒子重新启动时,脚本应该能够重新连接。

问题:您认为 shell 脚本足够安全来执行此操作吗?或者我应该更好地使用另一种(更安全的)编程语言(PERL,C,...)?

答案1

许多守护进程使用 bash 作为脚本语言来运行。使用它不会有任何问题。

答案2

一般来说,在 bash(或一般的 shell 脚本)中创建守护进程是相当棘手的。有些问题(例如后台分叉、输出和错误消息重定向或信号处理)并不容易解决。

对于您描述的具体问题,已经有一些(免费)软件可以与 respawn 进行自动 ssh 连接。

我用autossh以此目的。它是在 Debian 中打包的并且运行良好。

答案3

bash它非常安全,但除非能够处理清理工作,否则它的用处可能不大。如果它因任何原因被杀死,脚本需要能够自行exec更新,以便根据需要刷新其状态 - 您可能不想简单地执行以下操作:

while :

...例如。那很快就会变老。相反,也许可以做类似的事情:

trap '' HUP EXIT
set_state() { echo stuff="'$(otherstuff)'"... ; }
chk_interval() { wait for something... ; }
exec_me() { exec env - $(set_state) "$0" <in >out 2>alsoout & ; }
chk_interval
exec_me

它还可能取决于谁在进行清理工作。这最简单的实现守护进程的方法如下:

init=path/to/executable/script

...在内核命令行上,用于特别单一目的的安装。这里推断的相对值/是 initramfs /

相关内容