Arch Linux run script a minute after boot

30,567

Solution 1

Arch uses systemd to manage startup processes (daemons and the like as well).

You can write a script that simply executes the command that you want, or sleep for a min and then execute. Then add it to the boot process with the instructions on the

wiki

if you add a sleep:

#!/bin/sh
sleep 60 # one min
netctl start bridge

It should work perfectly fine. Systemd should spawn another process when it executes your script so it shouldn't make your system hang.

Solution 2

You can use systemd timers to execute script a minute after boot.

First, create service file (/etc/systemd/system/myscript.service):

[Unit]
Description=MyScript

[Service]
Type=simple
ExecStart=/usr/local/bin/myscript

Then create timer (/etc/systemd/system/myscript.timer):

[Unit]
Description=Runs myscript one minute after boot

[Timer]
# Time to wait after booting before activation
OnBootSec=1min
Unit=myscript.service

[Install]
WantedBy=multi-user.target

Now enable and run it:

# systemctl enable myscript.timer
# systemctl start myscript.timer

Solution 3

If you want something simple that's non-blocking, add the following to /etc/rc.local:

( sleep 60 && /path/to/command_or_script [opts] ) &
Share:
30,567

Related videos on Youtube

Gerharddc
Author by

Gerharddc

Updated on September 18, 2022

Comments

  • Gerharddc
    Gerharddc over 1 year

    I have set up a bridge between eth0 and wlan0 with netctl. It works fine if I tell it to configure eth0 and wlan0 at startup and then for me to manually start the bridge after it boots. If I tell the bridge to start automatically as well though for some reason the wlan adapter does not connect to an access point. I therefore need "netctl start bridge" to run a minute or so after the entire system has finished booting. Any idea how I should do this?

    PS. This is a headless system as in no xorg so running it at xorg startup won't work.

  • Gerharddc
    Gerharddc almost 10 years
    Well that's obvious but I have no idea how to make it start at the right time
  • Livinglifeback
    Livinglifeback almost 10 years
    add a sleep to is #!/bin/sh sleep(60) # one min netctl start bridge It shouldn't cause the system to hang as it should be spawned as a separate process.
  • Gerharddc
    Gerharddc almost 10 years
    Could you please just give me an example file for this as I'm a bit to unexperienced to know how to implement that.
  • Gerharddc
    Gerharddc almost 10 years
    Ok I've managed to get the file written and am now testing it
  • Gerharddc
    Gerharddc almost 10 years
    Well this definitely works for getting it to run at the right time but strangely this still does not solve the problem that I am trying to solve with it
  • Livinglifeback
    Livinglifeback almost 10 years
    What problem are you trying to solve?
  • Gerharddc
    Gerharddc almost 10 years
    The problem with the automatic bridge messing up my wlan connection
  • Livinglifeback
    Livinglifeback almost 10 years
    What do you use to connect your wlan? wicd, networking manager etc?
  • Gerharddc
    Gerharddc almost 10 years
    I use netctl but luckily it seems it just starting working after I increased the delay some more
  • Livinglifeback
    Livinglifeback almost 10 years
    Glad it worked for you.
  • godlygeek
    godlygeek almost 10 years
    The parens in "sleep(60)" are not necessary or syntactically valid for shell scripts.
  • mikeserv
    mikeserv almost 10 years
    sleep in a systemd startup script is contrary to the purpose of having a systemd startup script.
  • StrongBad
    StrongBad almost 10 years
    Couldn't you add an after line so the script runs after wlan0 is configured?
  • anlar
    anlar almost 10 years
    @StrongBad, probably you can add Requires=sys-subsystem-net-devices-wlan0.device and After=sys-subsystem-net-devices-wlan0.device to service to ensure that it will start after wlan0 configuration. But I haven't tested it by myself.