H Boot auto start systemd vel - szenergy/szenergy-public-resources GitHub Wiki
Kiindulás
Adott egy shell script, ami pl a CAN felkonfigurálását végzi. A cél, hogy ezt automatikusan, rendszerinduláskor végre legyen hajtva.
A script pl neve pl /home/nvidia/utils/nissan_can_setup.sh
tartalma pedig:
#!/bin/bash
modprobe can
modprobe can-raw
modprobe can-dev
modprobe mttcan
ifconfig can1 down
ip link set can1 up type can bitrate 500000
ifconfig can0 down
ip link set can0 up type can bitrate 500000
systemd
-vel
Lehetséges megoldás Készítsünk egy nissan_can_boot.service
fájlt a /etc/systemd/system
-ben. Ennek tartalma legyen:
[Unit]
After=network.target
[Service]
ExecStart=/home/nvidia/utils/nissan_can_setup.sh
User=root
[Install]
WantedBy=multi-user.target
Konfiguráljuk és telepítsük:
sudo chmod 664 /etc/systemd/system/nissan_can_boot.service
systemctl daemon-reload
systemctl enable nissan_can_boot.service
Teszteljük ezzel a paranccsal:
systemctl start nissan_can_boot.service
Következő bootnál már indulnia kell a scriptnek.
másik példa
cat /etc/systemd/system/start_roscore.service
[Unit]
Description=ros
[Service]
Type=forking
ExecStart=/home/szepilot/start_roscore.sh
User=root
[Install]
WantedBy=multi-user.target
cat /home/szepilot/start_roscore.sh
#!/bin/bash
source /opt/ros/melodic/setup.bash
source /home/szepilot/catkin_ws/devel/setup.bash
source /home/szepilot/autoware.ai/devel/setup.bash
export ROS_MASTER_URI=http://192.168.1.54:11311
export ROS_IP=192.168.1.54
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
# CUDA
export CUDA_ROOT=${CUDA_ROOT}:/usr/local/cuda-10.2
export CUDA_INC_DIR=${CUDA_INC_DIR}:/usr/local/cuda-10.2
export PATH=${PATH}:/usr/local/cuda-10.2/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda-10.2/lib64
export C_INCLUDE_PATH=${C_INCLUDE_PATH}:/usr/local/cuda-10.2/include
if ! screen -list | grep -q "roscore_autostart";
then
# start roscore
echo "start roscore"
screen -m -d -S roscore_autostart bash -c 'roscore'
else
echo "roscore already runs :)"
fi