Difference between revisions of "Debian: rc.local"

From OnnoWiki
Jump to navigation Jump to search
(Created page with "https://unix.stackexchange.com/questions/471824/what-is-the-correct-substitute-for-rc-local-in-systemd-instead-of-re-creating-rc As pointed out elsewhere, it becomes moderat...")
 
Line 1: Line 1:
https://unix.stackexchange.com/questions/471824/what-is-the-correct-substitute-for-rc-local-in-systemd-instead-of-re-creating-rc
+
* https://unix.stackexchange.com/questions/471824/what-is-the-correct-substitute-for-rc-local-in-systemd-instead-of-re-creating-rc
 +
* https://caklihat.com/baca/berita/menggunakan-rclocal-di-debian-10-buster
  
  
As pointed out elsewhere, it becomes moderately unclean to use rc-local.service under systemd.
+
Pada debian 10 tidak ditemukan adanya rc.local yang dungsinya biasanya untuk startup sebuah script tanpa repot membuat systemctl dan sebagainya.. jadi disini saya akan coba membuat rc.local kembali, yang pada debian terbaru sudah tidak ada atau mungkin sudah dihilangkan.. heheheh
  
It is theoretically possible that your distribution will not enable it. (I think this is not common, e.g. because disabling the same build option also removes poweroff / reboot commands that a lot of people use).
+
nano /etc/systemd/system/rc-local.service
The semantics are not entirely clear. Systemd defines rc-local.service one way, but Debian provides a drop-in file which alters at least one important setting.
 
rc-local.service can often work well. If you're worried about the above, all you need to do is make your own copy of it! Here's the magic:
 
  
  # /etc/systemd/system/my-startup.service
+
  [Unit]
 +
Description=/etc/rc.local
 +
ConditionPathExists=/etc/rc.local
 +
 
  [Service]
 
  [Service]
  Type=oneshot
+
  Type=forking
 +
ExecStart=/etc/rc.local start
 +
TimeoutSec=0
 +
StandardOutput=tty
 
  RemainAfterExit=yes
 
  RemainAfterExit=yes
  ExecStart=/usr/local/libexec/my-startup-script
+
  SysVStartPriority=99
 
   
 
   
 
  [Install]
 
  [Install]
 
  WantedBy=multi-user.target
 
  WantedBy=multi-user.target
  
I don't think you need to understand every single detail[*], but there are two things you need to know here.
+
  nano /etc/rc.local
 
 
You need to enable this with
 
 
 
  systemctl enable my-startup.service.
 
 
 
If your script has a dependency on any other service, including network-online.target, you must declare it. E.g. add a [Unit] section, with the lines Wants=network-online.target and After=network-online.target.
 
  
You don't need to worry about dependencies on "early boot" services - specifically, services that are already ordered before basic.target. Services like my-startup.service are automatically ordered after basic.target, unless they set DefaultDependencies=no.
+
#!/bin/sh -e
 +
#
 +
# rc.local
 +
#
 +
# This script is executed at the end of each multiuser runlevel.
 +
# Make sure that the script will "exit 0" on success or any other
 +
# value on error.
 +
#
 +
# In order to enable or disable this script just change the execution
 +
# bits.
 +
#
 +
# By default this script does nothing.
  
If you're not sure whether one of your dependencies is an "early boot" service, one approach is to list the services that are ordered before basic.target, by running systemctl list-dependencies --after basic.target. (Note that's --after, not --before).
+
exit 0
  
There are some considerations that I think also applied to pre-systemd rc.local:
+
chmod +x /etc/rc.local
 +
systemctl enable rc-local.service
 +
systemctl start rc-local.service
 +
systemctl status rc-local.service
  
You need to make sure your commands are not conflicting with another program that tries to control the same thing.
+
Cek statusnya bila sudah "active" silahkan edit rc.local nya untuk pengujian
It is best not to start long-running programs aka daemons from rc.local.
 
[*] I used Type=oneshot + RemainAfterExit=yes because it makes more sense for most one-shot scripts. It formalizes that you will run a series of commands, that my-startup will be shown as "active" once they have completed, and that you will not start a daemon.
 

Revision as of 09:25, 10 July 2022


Pada debian 10 tidak ditemukan adanya rc.local yang dungsinya biasanya untuk startup sebuah script tanpa repot membuat systemctl dan sebagainya.. jadi disini saya akan coba membuat rc.local kembali, yang pada debian terbaru sudah tidak ada atau mungkin sudah dihilangkan.. heheheh

nano /etc/systemd/system/rc-local.service
[Unit]
Description=/etc/rc.local
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target
nano /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
chmod +x /etc/rc.local
systemctl enable rc-local.service
systemctl start rc-local.service
systemctl status rc-local.service

Cek statusnya bila sudah "active" silahkan edit rc.local nya untuk pengujian