目标:在Linux中将自定义bash脚本作为服务运行,并允许我像将其通过终端/ bash传递给大多数其他服务一样,将命令传递给它。
我已经设置并测试了一个脚本,可以执行我需要的脚本,但我不知道如何像其他服务一样能够向其传递命令。示例:nano打开nano编辑器以读取指定的文件。我要执行“风扇开启”,它将调用新服务“风扇”并执行“开启”命令。奖励:能够将变量保存到配置文件中,以便以后进行修改。但是现在,我在脚本顶部设置了变量,因此它不是完全必要的。
当前单位文件:
[Unit] Description=Fan control Service [Service] Type=simple Restart=always RestartSec=30 ExecStart=/home/pi/Documents/FanControl.sh User=pi [Install] WantedBy=multi-user.target
脚本:
#!/bin/bash ######################################################### # User Settings #GPIO Pin Number to use to control fan transistor. fanpin=3 #Celsius temp to turn fan on/off offtemp=55 ontemp=60 #Turn on the looping script automatically or not autostart=TRUE #Determine how often to scan temp and turn fan on/off if in auto sleepinterval=10 ######################################################### #Misc Variables used in script - Leave these alone - Base Settings MaxTemp=0 FanState=OFF mode=MANUAL auto=FALSE ######################################################### # Functions Described Below ######################################################### before-start() { # Check if gpio is already exported if [ ! -d /sys/class/gpio/gpio$fanpin ] then #Export the Pin echo $fanpin > /sys/class/gpio/export sleep 1 ;# Short delay while GPIO permissions are set up echo Fan Pin Exported Successfully. # Setup the pin as an output sudo echo "out" > /sys/class/gpio/gpio$fanpin/direction fi } #Function to turn fan on on() { # Sets FanPin to high echo "1" > /sys/class/gpio/gpio$fanpin/value FanState=ON mode=Manual auto=FALSE echo Fan Turned on -- Mode set to Manual. echo } #Function to turn fan off off() { # Sets FanPin to low echo "0" > /sys/class/gpio/gpio$fanpin/value FanState=OFF mode=Manual auto=FALSE echo Fan Turned off -- Mode set to Manual. echo } #Function to set the variables to values #Haven't actually tested this function yet Set() { if $2 = "ontemp" then ontemp=$2 else $2=$3 fi } ######################################################### # Begin Service Execution Code ######################################################### #Don't know whow to write this section to keep it running as a service #But it works well for testing purposes before-start on sleep 3 off echo read -p "Select an action": Q $Q echo action="$1" serviceName="Fan-Control Service" echo Exiting Fan Service
我可以使用systemctl daemon-reload,它可以加载服务。我可以使用“ systemctl启动风扇”,并且服务成功启动,没有错误。它也会使风扇运转几秒钟,所以我知道它的启动很好。
[当尝试使用'fan on'作为bash命令时,我收到“找不到命令”-如何将其作为工作命令?-我需要在脚本中进行哪些更改以使它保持活动状态,以便以后能够将此类命令传递给它?
目标:在Linux中将自定义的bash脚本作为服务运行,并允许我像通过终端/ bash向大多数其他服务一样将命令传递给它。我已经设置并测试了一个脚本,可以执行...
服务通常不响应交互式命令,而是响应来自预定义集合的服务管理命令。如果这是您要证明的概念,那么我建议选择其他方向。